我是regex的新手,正如我所研究的,*匹配零个或多个,而+匹配一个或多个,所以我开始对此进行测试:
<?php
preg_match("/a/", 'bbba',$m);
preg_match("/a*/", 'bbba',$o);
preg_match("/a+/", 'bbba',$p);
echo '<pre>';
var_dump($m);
var_dump($o);
var_dump($p);
echo '</pre>';
?>
但是结果是*不匹配任何东西,并且在字母a存在时返回空:
array(1) {
[0]=>
string(1) "a"
}
array(1) {
[0]=>
string(0) ""
}
array(1) {
[0]=>
string(1) "a"
}
所以我在这里想念
答案 0 :(得分:3)
/a/
与a
中的第一个bbba
匹配
/a*/
匹配0个或更多a
个字符。字符串的开头和第一个a
之间有0个b
字符,因此与之匹配。
/a+/
匹配一个或多个a
字符,因此它匹配前一个a
字符
这里要注意的是,正则表达式将尽早尝试匹配它正在检查的字符串。
答案 1 :(得分:2)
*
表示前一项将被匹配零次或多次。
+
表示前一项将被匹配一次或多次。
也a*
匹配为空,这就是为什么它显示为空的结果。您可以使用preg_match_all("/a*/", 'bbba',$o);
,然后根据结果数组的非空值过滤结果。
答案 2 :(得分:1)
a*
表示不包含a
的匹配字符串,因为*
匹配零个或多个,
因此模式a*
甚至匹配空字符串。
要查看所有匹配项,可以使用preg_match_all
,例如:
<?php
preg_match_all("/a*/", 'bbba', $o);
var_dump($o);
结果,您将看到:
array(1) {
[0]=>
array(5) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(1) "a"
[4]=>
string(0) ""
}
}
希望它会对您有所帮助。