将字符串与PCRE中的多个模式匹配

时间:2011-05-25 05:34:28

标签: regex pcre

我们如何将字符串与PCRE中的多个图案匹配?我需要匹配这个字符串

subj1 = "9112345678 put car details of the car";

patt1 = "(\\d+) ([a-z]+) ([a-z]+) (.+)";

有时主题可能是这样的

subj2 = "9112345678 put car";

是匹配模式

patt2 = "(\\d+) ([a-z]+) ([a-z]+)";

因为主体是动态的并且不知道先前想要“或”这两种模式并且想要将主题与复合模式匹配。 就像是 子匹配(patt1或patt2) 我们可以在PCRE中这样做吗?

2 个答案:

答案 0 :(得分:2)

你只需要让最后一个块可选:

(\\d+) ([a-z]+) ([a-z]+)( (.+))?

如果你还需要允许“9112345678 put”,那么添加更多可选组:

(\\d+) ([a-z]+)( ([a-z]+)( (.+))?)?

如果你想保持对捕获组的顺序引用,如果你的PCRE引擎真的是PC,那么你可以用clustering groups代替一些捕获组:

(\\d+) ([a-z]+)(?: ([a-z]+)(?: (.+))?)?

感谢Kobi亲切地建议这个变种。使用此版本,匹配:

9112345678 put car details of the car

将产生:

    "9112345678"
  • $1"put"
  • $2"car"
  • $3"details of the car"
  • $4

这可能比处理所有额外的嵌套更容易处理。

答案 1 :(得分:1)

您可以使用运算符|。像([a-z]+)|([1-9]+)这样的东西。