【发布时间】:2015-07-23 12:14:30
【问题描述】:
是否可以在 Java 中编写一个匹配例如 3 个组中的 2 个(或 4 个组中的 3 个等)的正则表达式?
例如,我有以下正则表达式:
((?=.*\d)(?=.*[a-z])(?=.*[A-Z]))
这将只允许匹配所有三个组的模式 - 即它必须包含一个数字和一个小写字符和一个大写字符。我想让它验证一个模式,该模式至少包含三个组中的两个(例如一个数字和一个大写字符或一个小写和大写字符)。
是否可以在单个语句中执行,还是我必须编写单独的正则表达式并循环遍历它们?
【问题讨论】:
-
(?=.*\d)(?=.*[a-z])|(?=.[a-z])(?=.*[A-Z])|(?=.\d)(?=.[A-Z]) -
如果您有更多条件,我建议您单独测试条件。对于小案例,你仍然可以列出所有的组合,但当你必须处理更多时,它会变得一团糟。
-
您实际上可以在 .NET 正则表达式中使用平衡的捕获组来执行此操作...但这在 Java 中不可用。