Regex 带有特定字符的正则表达式帮助
我最近得到了一个问题的答案: 但现在我只想匹配其中有@符号的情况 原始正则表达式是:Regex 带有特定字符的正则表达式帮助,regex,Regex,我最近得到了一个问题的答案: 但现在我只想匹配其中有@符号的情况 原始正则表达式是: (?!.*([._%+-])\1)[A-Za-z0-9._%+-]+ 所以我试着: (?!.*([._%+-])\1)[A-Za-z0-9._%+-]+@(?!.*([._%+-])\1)[A-Za-z0-9._%+-]+ 但这不允许我的任何特殊角色跟随@符号 例如,上面匹配的是+foo.bar+-test+@m,而不是+foo.bar+-test+@m+ 你知道我做错了什么吗?你重新使用了backref
(?!.*([._%+-])\1)[A-Za-z0-9._%+-]+
所以我试着:
(?!.*([._%+-])\1)[A-Za-z0-9._%+-]+@(?!.*([._%+-])\1)[A-Za-z0-9._%+-]+
但这不允许我的任何特殊角色跟随@符号
例如,上面匹配的是+foo.bar+-test+@m,而不是+foo.bar+-test+@m+
你知道我做错了什么吗?你重新使用了backreference\1,因此它阻止你再次匹配特殊字符。您根本不需要重复前瞻性断言。试一试
^(?!.*([._%+-])\1)(?=.*@)[\w.%+@-]+$
(?!.*([._%+-])\1)[A-Za-z0-9._%+-]+@[A-Za-z0-9._%+-]+
这里有一个关于非常有用的IMHO环顾断言的教程。上面的?=.*@就是一个例子。