验证正则表达式子匹配

validate regex submatches

我有下面的话:

和以下正则表达式:

这将触发以下匹配:

有什么方法可以确保子匹配项 (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$

RegEx Demo

将您的正则表达式修改为

^(?=.*\d.*\d.*\d.*)E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$

当且仅当它至少有三个数字时,这将匹配输入,无论它们是在哪个子组中捕获的。