寻找正则表达式模式以获取最大匹配

时间:2019-04-15 19:35:24

标签: regex passwords

我正在寻找一种正则表达式模式,该模式可以根据最大出现次数限制匹配项。

例如,匹配长度在 6-12个字符之间的字母数字字符串,并且包含最低2 ,但不超过4 ,大写字母,无论它们在字符串中的位置如何。

我已经尝试过这种模式,但是只有大写字母彼此相邻时,它才匹配。

^([A-Z]{2,4}).{8,12}$

有效匹配为:

HamBurger (2 uppercase, Length = 9)
LeTtUce (3 uppercase, Length = 7)
TACOss (4 uppercase, Length = 6)

但是无效匹配将是:

ABCDE1234 (too many uppercase letters)
aBcDeFgHiJ (too many uppercase letters)
ADBC (length too short)

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用基于前瞻性的解决方案,例如

pageOne()

或者,为了使其更简化,将长度检查移到开始处(向前看):

^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$).{6,12}$

请参见regex demo(或this one)和Regulex graph

enter image description here

详细信息

  • ^(?=.{6,12}$)(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$ -字符串的开头
  • ^-一个正向的超前查询,要求重复2到4个重复,除了大写字母之外的0+个字符,然后是大写字母,然后是除大写字母之外的任何0+个字符到字符串的末尾
  • (?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)-6至12个字符
  • .{6,12}-字符串的结尾。