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

在Java正则表达式中匹配y组中的x组,java,regex,Java,Regex,是否可以用Java编写一个正则表达式模式来匹配,例如,3个组中的2个(或4个组中的3个)组 例如,我有以下正则表达式: ((?=.*\d)(?=.*[a-z])(?=.*[A-Z])) 这将只允许匹配所有三个组的模式-即,它必须包含一个数字、一个小写字符和一个大写字符。我想这样做,它将验证一个模式,其中至少包含三组中的两组(例如,数字和大写字符或小写和大写字符) 这在一条语句中是可行的,还是我必须编写单独的正则表达式并循环使用它们?您将需要替换以考虑所有可能的场景: ((?=.*\d)(?=.

是否可以用Java编写一个正则表达式模式来匹配,例如,3个组中的2个(或4个组中的3个)组

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

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))
这将只允许匹配所有三个组的模式-即,它必须包含一个数字、一个小写字符和一个大写字符。我想这样做,它将验证一个模式,其中至少包含三组中的两组(例如,数字和大写字符或小写和大写字符)


这在一条语句中是可行的,还是我必须编写单独的正则表达式并循环使用它们?

您将需要替换以考虑所有可能的场景:

((?=.*\d)(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))
请参见将整个字符串与
matches()
匹配:


(?=.*\d)(?=.[a-z])|(?=.[a-z])(?=.[a-z])|(?=.[a-z])(?=.\d)(?=.[a-z])
如果有更多条件,我建议您单独测试这些条件。对于小型情况,您仍然可以列出所有组合,但当您必须处理更多组合时,它将变得一团糟。您实际上可以在.NET正则表达式中使用平衡捕获组来执行此操作…但这在Java中不可用。对于更多组,这将变得非常复杂。难道没有一种更简短、更通用的方法吗?通用的方法是不使用正则表达式。正则表达式不是万能的。当规则变得复杂时,您应该使用常规代码。谢谢。我已经开始使用常规代码检查替代方案,但我想确保我没有遗漏一些明显的东西。
((?=.*\d)(?=.*[a-z])|^(?=.*\d)(?=.*[A-Z])|^(?=.*[a-z])(?=.*[A-Z])).*