寻找最大匹配的正则表达式模式
Looking for Regex pattern for maximum matches
我正在寻找可以根据最大出现次数限制匹配的正则表达式模式。
例如,匹配长度在 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)
在此先感谢您的帮助。
您可以使用像
这样的基于前瞻的解决方案
^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$).{6,12}$
或者,为了使其更加精简,将长度检查移至开头(进入前瞻):
^(?=.{6,12}$)(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$
见regex demo (or this one) and the Regulex graph:
详情
^
- 字符串的开头
(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)
- 正向前瞻,需要重复两到四次重复 0+ 个非大写字母的字符后跟一个大写字母,然后是除大写字母以外的任何 0+ 个字符到字符串的末尾
.{6,12}
- 6 到 12 个字符
$
- 字符串结尾。
我正在寻找可以根据最大出现次数限制匹配的正则表达式模式。
例如,匹配长度在 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)
在此先感谢您的帮助。
您可以使用像
这样的基于前瞻的解决方案^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$).{6,12}$
或者,为了使其更加精简,将长度检查移至开头(进入前瞻):
^(?=.{6,12}$)(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$
见regex demo (or this one) and the Regulex graph:
详情
^
- 字符串的开头(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$)
- 正向前瞻,需要重复两到四次重复 0+ 个非大写字母的字符后跟一个大写字母,然后是除大写字母以外的任何 0+ 个字符到字符串的末尾.{6,12}
- 6 到 12 个字符$
- 字符串结尾。