我们如何将字符串与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中这样做吗?
答案 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]+)
这样的东西。