匹配Java正则表达式中的y组中的x

Tra*_*gon 8 java regex

是否有可能在Java中编写一个正则表达式模式,例如,3个中的2个(或4个中的3个)组?

例如,我有以下正则表达式:

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))
Run Code Online (Sandbox Code Playgroud)

这将只允许匹配所有三个组的模式 - 即它必须包含一个数字和一个小写字符和一个大写字符.我想这样做,它将验证一个包含三个组中至少两个的模式(例如一个数字和一个大写字符或一个小写和大写字符).

它是在单个语句中可行还是我将不得不编写单独的正则表达式并循环它们?

Wik*_*żew 2

您将需要进行更改以考虑所有可能的情况:

((?=.*\d)(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))
Run Code Online (Sandbox Code Playgroud)

请参阅将整个字符串与 匹配的演示matches()

((?=.*\d)(?=.*[a-z])|^(?=.*\d)(?=.*[A-Z])|^(?=.*[a-z])(?=.*[A-Z])).*
Run Code Online (Sandbox Code Playgroud)