gpt4 book ai didi

php - 为什么 preg_match 返回一些空元素?

转载 作者:可可西里 更新时间:2023-11-01 13:25:58 24 4
gpt4 key购买 nike

我写了正则表达式 ^(?:([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 但它是空的,并且还有另一个空元素。为什么会出现这些空元素?

最佳答案

如果您使用 regex101.com 上的正则表达式,所有未参与(即不匹配的)组都将被隐藏。您可以在选项中打开它们:

enter image description here

你会看到他们:

enter image description here

快速修复是使用分支重置 (?|...) 而不是非捕获组 (?:...) 并访问$matches[1] 值:

preg_match('/^(?|([1-5])|([1-5]) .*|.* ([1-5])|.* ([1-5]) .*)$/', 'order 12314124 5', $matches);
print_r($matches[1]); // => 5

参见 IDEONE demo

关于php - 为什么 preg_match 返回一些空元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34153780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com