我已经写了正则表达式^(?:([1-5])|([1-5]) .*|.* ([1-5])|.* ([1-5]) .*)$
以匹配独立数字1-5,或者由字符串的其余部分分隔至少一个空格的数字。我在在线服务中对它进行了测试,结果就是数字本身。但是,使用代码时
preg_match('/^(?:([1-5])|([1-5]) .*|.* ([1-5])|.* ([1-5]) .*)$/', 'order 12314124 5', $matches);
我明白了:
Array ( [0] => order 12314124 5 [1] => [2] => [3] => 5 )
[0]元素是完全匹配,这很好。我预计[1]元素为5,但它是空的,还有另一个空元素。为什么会出现这些空元素?
答案 0 :(得分:3)
如果您在regex101.com上使用了正则表达式,则会隐藏所有非参与组(即不匹配的组)。您可以在选项中打开它们:
你会看到它们:
快速解决方法是使用分支重置(?|...)
而不是非捕获组(?:...)
并访问$matches[1]
值:
preg_match('/^(?|([1-5])|([1-5]) .*|.* ([1-5])|.* ([1-5]) .*)$/', 'order 12314124 5', $matches);
print_r($matches[1]); // => 5
请参阅IDEONE demo