是否可以在Java中编写一个正则表达式模式,例如,3个中的2个(或4个中的3个)组?
例如,我有以下正则表达式:
((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))
只允许匹配所有三个组的模式 - 即它必须包含一个数字和一个小写字符和一个大写字符。我想这样做,它将验证一个包含三个组中至少两个的模式(例如数字和大写字符或大写和小写字符)。
在单个语句中是否可行,或者我是否必须编写单独的正则表达式并循环它们?
答案 0 :(得分:2)
您需要更改以考虑所有可能的情况:
((?=.*\d)(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))
请参阅demo,其中整个字符串也与matches()
匹配:
((?=.*\d)(?=.*[a-z])|^(?=.*\d)(?=.*[A-Z])|^(?=.*[a-z])(?=.*[A-Z])).*