如何选择匹配组?

时间:2016-10-03 19:55:02

标签: regex

我有两种可能的模式:

1.2 hello
1.2.3 hello

我想匹配123 ,如果后者存在

Optional items似乎是要走的路,但我的pattern (\d)\.(\d)?(\.(\d)).hello仅匹配1.2.3 hello(几乎完美:我得到四组但是第一组,第二组和第四组包含我想要的东西) - 第一次测试刺痛根本不匹配。

什么是正确的匹配模式?

1 个答案:

答案 0 :(得分:1)

您的模式包含与数字匹配的(\d)\.(\d)?(\.(\d))部分,然后是.,然后是可选数字(可能是1或0),然后是. +数字。因此,它可以匹配1..2 hello,但不匹配1.2 hello

您可以使第三组不捕获并使其成为可选:

(\d)\.(\d)(?:\.(\d))?\s*hello
          ^^^      ^^

请参阅regex demo

如果您的正则表达式引擎不允许非捕获组,请使用捕获组,只需要从第4组中获取值:

(\d)\.(\d)(\.(\d))?\s*hello

请参阅this regex

请注意,我在使用.的{​​{1}}之前替换了hello以匹配零个或多个空格。

另请注意,如果您需要在一行开头匹配这些数字,则可以考虑使用\s*预先处理该模式(并且取决于您的正则表达式引擎/工具,^改性剂)。