如果我把*放在我的正则表达式中,它就不起作用,如果我放+,它就有效。
*
应该是0或更多,+
应该是1或更多。
案例*
$num = ' 527545855 ';
var_dump( preg_match( '/\d*/', substr( $num, 0, 18 ), $coincidencias ) );
var_dump($coincidencias);exit;
结果:
int(1)
array(1) {
[0]=>
string(0) ""
}
案例+
$num = ' 527545855 ';
var_dump( preg_match( '/\d+/', substr( $num, 0, 18 ), $coincidencias ) );
var_dump($coincidencias);exit;
结果:
int(1)
array(1) {
[0]=>
string(9) "527545855"
}
我认为两者都应该有效,但我不明白为什么*不起作用。
答案 0 :(得分:7)
*
表示0或更多次出现,因此第一次出现是测试字符串中的空字符串
答案 1 :(得分:4)
引擎将尝试从索引0开始匹配。
\d*
可以匹配空字符串,因此引擎将返回索引为0的空字符串。\d+
必须匹配至少一个数字,并且由于量词是贪婪的,它将返回最接近的数字序列,同时尽可能多的数字(在您的情况下,它是整体输入字符串中的数字序列。)答案 2 :(得分:4)
你在问题中回答了这个问题:
* should mean 0 or more, + should mean 1 or more.
它匹配的第一件事是 0 或更多数字。
答案 3 :(得分:3)
它会匹配数字或无
\d*
表示将 0 与多位数匹配
中的示例
hello 123
正则表达式\d*
匹配 8次,即开始时为{1 ^
),hello
为6次,123
为1次
答案 4 :(得分:2)
正则表达式中的*
获取前面的字符并查找0个或更多实例。
正则表达式中的+
查找一个或多个实例。
由于你没有真正检查数字(照顾其他项目),你将从*
的正则表达式中获得更多项目,因为它允许满足0实例子句,这对于数字前面的所有空格(空格匹配数字的0个实例)。 +
确保找到至少。