【问题标题】:Looking for Regex pattern for maximum matches寻找最大匹配的正则表达式模式
【发布时间】:2019-04-15 19:35:23
【问题描述】:

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

例如,匹配一个长度在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)

提前感谢您的帮助。

【问题讨论】:

标签: regex passwords


【解决方案1】:

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

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

或者,为了更精简,将长度检查移到开头(进入前瞻):

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

查看regex demo(或this one)和Regulex graph

详情

  • ^ - 字符串的开头
  • (?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$) - 正向前瞻,需要 2 到 4 次重复 0+ 字符而不是大写字母,后跟一个大写字母,然后是任何 0+ 字符而不是大写字母到字符串的末尾
  • .{6,12} - 6 到 12 个字符
  • $ - 字符串结束。

【讨论】:

  • 谢谢,维克托!这正是我所需要的。
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 2022-11-22
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多