PHP正则表达式(+和*之间的结果不同)

时间:2013-05-30 13:33:39

标签: php regex

如果我把*放在我的正则表达式中,它就不起作用,如果我放+,它就有效。

*应该是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"
}

我认为两者都应该有效,但我不明白为什么*不起作用。

5 个答案:

答案 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个实例)。 +确保找到至少