我正在尝试在一个简单的字符串上练习星号 * 量词,但是虽然我只有两个字母,但结果包含第三个匹配项。
<?php
$x = 'ab';
preg_match_all("/a*/",$x,$m);
echo '<pre>';
var_dump($m);
echo '</pre>';
?>
结果出来了:
array(1) {
[0]=>
array(3) {
[0]=> string(1) "a"
[1]=> string(0) ""
[2]=> string(0) ""
}
}
据我了解,它首先匹配 a,然后 b 时没有匹配,所以结果应该是
array(1) {
[0]=>
array(2) {
[0]=> string(1) "a"
[1]=> string(0) ""
}
}
那么第三场比赛是什么?
使用正则表达式演示工具here,我们可以看到第一场比赛是a
,而第二个和第三个匹配项之间的零宽度分隔符a
and b
,以及之间的b
和字符串的末尾。
请记住,以下行为preg_match_all
就是重复采取模式a*
并尝试将其顺序应用于整个输入字符串。
我怀疑你真正想在这里使用的是a+
。如果你检查这个第二个演示,你会看到a+
我们只得到一个匹配,对于单个a
信中ab
。所以,我投票支持使用a+
在这里解决您的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)