Regex 寻找最大匹配的正则表达式模式

Regex 寻找最大匹配的正则表达式模式,regex,passwords,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-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)
但无效匹配可能是:

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}$
或者,若要使其更加精简,请将长度检查移到开头(进入“向前看”):

请参阅(或)和:

详细信息

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

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

^(?=(?:[^A-Z]*[A-Z]){2,4}[^A-Z]*$).{6,12}$
或者,若要使其更加精简,请将长度检查移到开头(进入“向前看”):

请参阅(或)和:

详细信息

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

谢谢,Wiktor!这正是我需要的谢谢Wiktor!这正是我需要的。你应该好好阅读。你应该好好阅读。