我需要编写一个正则表达式来评估以下条件:
例如,字符串'aa1A !!'应该匹配,应该'!! A1aa'。
我写了以下正则表达式:
'/(?=([a-z]){2,})(?=[0-9])(?=[A-Z])(?=(\W)\1)/'
我发现每个人的表达都有效,但我很难将它们整合在一起。我错过了什么?
答案 0 :(得分:0)
首先,必须锚定您的模式,以确保仅从字符串开头的位置测试前瞻。然后,由于您的字符可以在字符串中的任何位置,您需要使用.*
启动前瞻中的子模式。
\W
是非单词字符的字符类(所有不是[A-Za-z0-9_]
的字符,包括空格,控制字符,重音字母......)。 IMO,\pP
或[[:punct:]]
更合适。
/^(?=.*[a-z]{2})(?=.*[0-9])(?=.*[A-Z])(?=.*(\pP)\1)/
关于制作4种模式而不是1种模式的想法,它看起来是一个好主意,它的味道好像一个好主意,但它没用,而且速度慢。但是,如果您想知道哪个特定规则失败,那将会很有趣。