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

时间:2015-07-23 12:14:31

标签: java regex

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

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

((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))

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

在单个语句中是否可行,或者我是否必须编写单独的正则表达式并循环它们?

1 个答案:

答案 0 :(得分:2)

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

((?=.*\d)(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))

请参阅demo,其中整个字符串也与matches()匹配:

((?=.*\d)(?=.*[a-z])|^(?=.*\d)(?=.*[A-Z])|^(?=.*[a-z])(?=.*[A-Z])).*