在PHP中使用多个正则表达式

时间:2016-04-03 23:31:48

标签: php regex

我需要编写一个正则表达式来评估以下条件:

  • 连续2个小写字符
  • 至少1位数
  • 至少1个大写字符
  • 连续2个相同的标点字符

例如,字符串'aa1A !!'应该匹配,应该'!! A1aa'。

我写了以下正则表达式:

'/(?=([a-z]){2,})(?=[0-9])(?=[A-Z])(?=(\W)\1)/'

我发现每个人的表达都有效,但我很难将它们整合在一起。我错过了什么?

1 个答案:

答案 0 :(得分:0)

首先,必须锚定您的模式,以确保仅从字符串开头的位置测试前瞻。然后,由于您的字符可以在字符串中的任何位置,您需要使用.*启动前瞻中的子模式。

\W是非单词字符的字符类(所有不是[A-Za-z0-9_]的字符,包括空格,控制字符,重音字母......)。 IMO,\pP[[:punct:]]更合适。

/^(?=.*[a-z]{2})(?=.*[0-9])(?=.*[A-Z])(?=.*(\pP)\1)/

关于制作4种模式而不是1种模式的想法,它看起来是一个好主意,它的味道好像一个好主意,但它没用,而且速度慢。但是,如果您想知道哪个特定规则失败,那将会很有趣。