匹配不超过一个@字符的字符串

时间:2017-01-09 17:24:20

标签: regex

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

这些字符串应该匹配:

foobar
@foobar
foo@bar
foo@bar@baz

不应匹配这些字符串:

@@foobar
foo@@bar
foo@bar@@baz

引擎支持前瞻和后视。

我已尝试使用(?<!@)@(?!@)完成1次重复,但((?<!@)@(?!@)|)(?<!@)@?(?!@)显然不会按预期重复0或1次。< / p>

如何处理这种情况?

1 个答案:

答案 0 :(得分:5)

如果没有任何先行支持,您可以使用此否定字符类正则表达式:

^[^@]*(?:@[^@]+)*$

[^@]匹配任何非@的内容。

RegEx Demo

如果你在正则表达式中有先行支持,那么使用更简单的正则表达式:

^(?!.*@@).*$

其中(?!.*@@)为负正则表达式,以禁止字符串中的@@位置。

RegEx Demo 2