我有以下单词:
E012PH345AN678T
以及以下正则表达式:
^E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
这将触发以下匹配:
- 1:012
- 2:PH345AN
- 3:345
- 4:
- 5:678
有没有办法确保子匹配(1,3,4,5)在同一个正则表达式(a-la (1345)d{3,}
)中至少包含3个数字?regex将在Java环境中运行,我无法对其进行太多控制。
更新-作为一个附加示例,此EXY2PHZ45ANUWT
也应该匹配。。。我只需要在全局级别的比赛中找到2,4,5
。这些数字只是我需要的一个简化的例子。。。可以是字母或其他东西。
谢谢。
将正则表达式修改为
^(?=.*d.*d.*d.*)E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
这将匹配输入,如果且仅当输入至少有三个数字,无论它们在哪个子组中被捕获。
您可以使用这个基于前瞻性的正则表达式:
^(?=(D*d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
(?=d{3})
是一种前瞻性方法,可以确保您的输入中至少有3位数字。
在Java中:
^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
RegEx演示