我需要确保指定的字符(@
)连续重复不超过一次。它可以多次出现,但是只能作为一个@
字符出现,不能超过@@
个字符。捕获组是不必要的。
这些字符串应匹配:
foobar
@foobar
foo@bar
foo@bar@baz
这些字符串不应匹配:
@@foobar
foo@@bar
foo@bar@@baz
该引擎支持先行和后备。
我试过用
(?<!@)@(?!@)
进行1次重复,但是((?<!@)@(?!@)|)
或(?<!@)@?(?!@)
显然不能按预期的0或1次重复进行。如何处理这种情况?
最佳答案
如果没有任何前瞻性支持,则可以使用以下否定的字符类正则表达式:
^[^@]*(?:@[^@]+)*$
其中
[^@]
与不属于@
的任何内容匹配。RegEx Demo
如果您的正则表达式中有超前支持,请使用更简单的正则表达式:
^(?!.*@@).*$
其中
(?!.*@@)
为负正则表达式,以禁止在字符串中的任何位置出现@@
。RegEx Demo 2
关于regex - 连续匹配不超过一个@字符的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41553504/