我想在一个简单的字符串练习星号*量词,但同时,我只有两个字母,结果包含第三场比赛。
<?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) ""
}
}
我的理解是第一相匹配的则没有符合当b,所以结果应该是
array(1) {
[0]=>
array(2) {
[0]=> string(1) "a"
[1]=> string(0) ""
}
}
那么,什么是第三场比赛?
从使用一个正则表达式的演示工具here,我们可以看到,在第一匹配是a
,而第二和第三匹配是在a
和b
之间的零名宽度的分隔符,并且还在b
和字符串的端部之间。
请记住,preg_match_all
的行为是反复取图案a*
并尝试按顺序将其应用到整个输入字符串。
我怀疑你真的想在这里用的是a+
。如果你研究这个second demo,你会看到与a+
我们只得到一个匹配,在a
单ab
信。所以,我投用a+
这里解决您的问题。
你正则表达式“/ A / *”匹配零(空)或更多的连续a
字符。
例如:如果你试图匹配“/ A * /”空字符串,它将返回一个匹配,因为*是指没有以上。 see here
在preg_match_all继续寻找,直到finishning处理整个字符串。一旦找到匹配,它remainds字符串尝试和应用其他比赛。