验证正则表达式子匹配

时间:2015-02-11 14:36:15

标签: java regex match

我有以下几个字:

  • E012PH345AN678T

以及以下正则表达式:

  • ^E(.*)?(PH(.*)?AN|AN(.*)?PH)(.*)?T$

这将触发以下匹配:

  • 1:012
  • 2:PH345AN
  • 3:345
  • 4:
  • 5:678

有没有办法确保子匹配(1,3,4,5)在同一个正则表达式(a-la (\1\3\4\5)\d{3,})中包含至少3个数字?正则表达式将在我无法控制的Java环境中运行。

更新 - 作为一个额外的例子,这个EXY2PHZ45ANUWT也应该匹配......我只需要在全局级别的匹配中找到2,4,5。数字只是我需要的一个简单例子......可以是字母或其他东西。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用这个基于前瞻性的正则表达式:

^(?=(\D*\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$

(?=\d{3})是一个预测,确保输入中至少有3位数字。

在Java中:

^(?=(\\D*\\d){3})E(.*?)(PH(.*?)AN|AN(.*?)PH)(.*?)T$

RegEx Demo

答案 1 :(得分:2)

将正则表达式修改为

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

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