我有以下几个字:
E012PH345AN678T
以及以下正则表达式:
^E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
这将触发以下匹配:
有没有办法确保子匹配(1,3,4,5)在同一个正则表达式(a-la (\1\3\4\5)\d{3,}
)中包含至少3个数字?正则表达式将在我无法控制的Java环境中运行。
更新 - 作为一个额外的例子,这个EXY2PHZ45ANUWT
也应该匹配......我只需要在全局级别的匹配中找到2,4,5
。数字只是我需要的一个简单例子......可以是字母或其他东西。
感谢。
答案 0 :(得分:3)
您可以使用这个基于前瞻性的正则表达式:
^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
(?=\d{3})
是一个预测,确保输入中至少有3位数字。
在Java中:
^(?=(\\D*\\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$
答案 1 :(得分:2)
将正则表达式修改为
^(?=.*\d.*\d.*\d.*)E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$
这将匹配输入,当且仅当它具有至少三位数时,无论它们在哪个子组中被捕获。