匹配连续不超过@个字符的字符串
问题描述:
我需要确保指定字符(@
)连续重复不超过一次。它可以发生多次,但仅作为单个@
字符,而不是@@
或更多。捕获组是不必要的。匹配连续不超过@个字符的字符串
这些字符串应该匹配:
foobar
@foobar
[email protected]
[email protected]@baz
这些字符串不应该匹配:
@@foobar
[email protected]@bar
[email protected]@@baz
该引擎支持向前看符号和lookbehinds。
我已经试过用(?<[email protected])@([email protected])
这样做了1次重复,但是((?<[email protected])@([email protected])|)
或(?<[email protected])@?([email protected])
显然不会按照0或1次重复的意图工作。
这种情况怎么处理?
答
没有任何先行的支持,你可以使用这个否定的字符类的正则表达式:
^[^@]*(?:@[^@]+)*$
凡[^@]
匹配任何不@
。
如果在您的正则表达式有前瞻的支持,然后使用一个简单的正则表达式:
^(?!.*@@).*$
哪里(?!.*@@)
为负正则表达式字符串不允许@@
任何地方。
+1
优秀。非常感谢。 – estus
如果一行没有任何@字符怎么办?它应该匹配还是不匹配? –
@ S.Imp它应该。这种情况列在*这些字符串应该匹配*。 – estus
堆栈溢出不是免费的为您创建正则表达式的咨询。你尝试了什么,它是怎么出错的,你做了什么来尝试解决这个问题? –