验证regex子匹配



我有以下单词:

  • 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演示

最新更新