我需要确保指定的字符(@
)连续重复不超过一次。它可以多次出现,但只能作为单个@
字符,而不是@@
或更多。捕获组是不必要的。
这些字符串应该匹配:
foobar
@foobar
foo@bar
foo@bar@baz
不应匹配这些字符串:
@@foobar
foo@@bar
foo@bar@@baz
引擎支持前瞻和后视。
我已尝试使用(?<!@)@(?!@)
完成1次重复,但((?<!@)@(?!@)|)
或(?<!@)@?(?!@)
显然不会按预期重复0或1次。< / p>
如何处理这种情况?
答案 0 :(得分:5)
如果没有任何先行支持,您可以使用此否定字符类正则表达式:
^[^@]*(?:@[^@]+)*$
[^@]
匹配任何非@
的内容。
如果你在正则表达式中有先行支持,那么使用更简单的正则表达式:
^(?!.*@@).*$
其中(?!.*@@)
为负正则表达式,以禁止字符串中的@@
位置。