我需要确保指定的字符(@)连续重复不超过一次。它可以多次出现,但是只能作为一个@字符出现,不能超过@@个字符。捕获组是不必要的。

这些字符串应匹配:

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/

10-11 22:45
查看更多