验证正则表达式子匹配
validate regex submatches
我有下面的话:
E012PH345AN678T
和以下正则表达式:
^E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
这将触发以下匹配:
- 1:012
- 2:PH345AN
- 3:345
- 4:
- 5:678
有什么方法可以确保子匹配项 (1,3,4,5) 在同一正则表达式 (a-la ()\d{3,}
) 中至少包含 3 个数字?在我无法控制太多的 Java 环境中,正则表达式将是 运行。
Update - 作为一个额外的例子,这个 EXY2PHZ45ANUWT
也应该匹配......我只需要在比赛中找到 2,4,5
全球层面。这些数字只是我需要的一个简化示例......可以是字母或其他东西。
谢谢。
您可以使用这个基于前瞻的正则表达式:
^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
(?=\d{3})
是前瞻性的,确保您的输入中至少有 3 位数字。
在Java中:
^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
将您的正则表达式修改为
^(?=.*\d.*\d.*\d.*)E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
当且仅当它至少有三个数字时,这将匹配输入,无论它们是在哪个子组中捕获的。
我有下面的话:
E012PH345AN678T
和以下正则表达式:
^E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
这将触发以下匹配:
- 1:012
- 2:PH345AN
- 3:345
- 4:
- 5:678
有什么方法可以确保子匹配项 (1,3,4,5) 在同一正则表达式 (a-la ()\d{3,}
) 中至少包含 3 个数字?在我无法控制太多的 Java 环境中,正则表达式将是 运行。
Update - 作为一个额外的例子,这个 EXY2PHZ45ANUWT
也应该匹配......我只需要在比赛中找到 2,4,5
全球层面。这些数字只是我需要的一个简化示例......可以是字母或其他东西。
谢谢。
您可以使用这个基于前瞻的正则表达式:
^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
(?=\d{3})
是前瞻性的,确保您的输入中至少有 3 位数字。
在Java中:
^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
将您的正则表达式修改为
^(?=.*\d.*\d.*\d.*)E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
当且仅当它至少有三个数字时,这将匹配输入,无论它们是在哪个子组中捕获的。