regex - 如果文本只包含一次字符串,则匹配该文本的正则表达式

标签 regex string

我想编写一个正则表达式,如果文本仅包含一次字符串,则该正则表达式与文本匹配。文本必须包含 <scr>只有一次。以下是一些示例:

hello-<scr>Keephello-endofstring//好的; <scr>发生一次

test-<scr>bla<scr>bla-end//不好; <scr>出现2次

hello-Keephello-end//不好; <scr>没有发生

我尝试使用以下正则表达式:

((?:(?<!<scr>).)*<scr>(?:(?!<scr>).)*)

第一个负向后查找可确保 <scr>不会发生。
<scr>必须遵循。
此后,负向前瞻可确保不再 <scr>关注。

它不起作用。
我想知道如何使用正则表达式来完成此操作? (附说明)

最佳答案

要检查文本是否仅包含某个子字符串一次,您需要检查是否匹配所有不构成 <scr> 的字符。 ,然后匹配<scr> ,并使用负前瞻检查是否不存在 <scr>进一步,并消耗所有角色。另外,行/字符串边界 ^/$是必须的:

^(?:(?!<scr>).)*<scr>(?!.*<scr>).*$

参见demo

说明:

  • ^ - 行开头(如 m 多行选项打开)
  • (?:(?!<scr>).)* - 一个非捕获组来匹配每个字符(不是换行符 - 为此,您还需要添加 s 单行选项),该字符前面没有 <scr>
  • <scr> - 我们的文字 <scr>
  • (?!.*<scr>) - 我们没有的负面回顾检查<scr>还有更多
  • .*$ - 将其余字符与行尾匹配的子模式。

关于regex - 如果文本只包含一次字符串,则匹配该文本的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30144801/

相关文章:

android - 在保持原始大小写的同时突出显示 ListView 中的搜索词

评估用户输入时代码无法继续

java - 读取文件并放入一些数组中

php - 检查行是否包含字符串中的子字符串

java - 字符串拆分两次后如何返回String[][]?

sql - 正则表达式中的多种模式

php - 匹配初始化的整数值

c++ - std::String 调整大小不改变地址

JavaScript 正则表达式(当且仅当)

java - 正则表达式捕获具有常见字符的组