如果只包含一个字符串,我想编写一个与文本匹配的正则表达式。文本<scr>
只能包含一次。这里有些例子:
hello-<scr>Keephello-endofstring
//好的; <scr>
发生一次
test-<scr>bla<scr>bla-end
//不好; <scr>
发生两次
hello-Keephello-end
//不好; <scr>
不会发生
我尝试使用以下正则表达式:
((?:(?<!<scr>).)*<scr>(?:(?!<scr>).)*)
向后看的第一个负数确保<scr>
不会发生这种情况。
比<scr>
必须跟随。
之后,负面的前瞻确保不再有<scr>
后续行动。
这没用。
我想知道如何用正则表达式来完成?(附说明)
要检查文本是否仅包含某个子字符串一次,您需要检查是否匹配所有不构成的字符<scr>
,然后匹配<scr>
,并使用否定的前瞻检查是否没有<scr>
进一步的字符,并消耗所有字符。此外,行/字符串边界^
/$
必须:
^(?:(?!<scr>).)*<scr>(?!.*<scr>).*$
观看演示
说明:
^
-行首(因为m
多行选项为开)(?:(?!<scr>).)*
-一个非捕获组来匹配每个字符之前的字符(不是换行符-为此,还需要添加s
单行选项)<scr>
<scr>
-我们的文字 <scr>
(?!.*<scr>)
-后退否定性检查我们没有<scr>
更多.*$
-将其余字符匹配到行尾的子模式。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句