【发布时间】:2014-02-28 00:43:37
【问题描述】:
这是一段非常简单的代码:
<?php
$matches = array();
$str = "You came in 21st out of 53";
preg_match("/(\d+).*(\d+)/",$str,$matches);
echo var_dump($matches);
?>
我正在学习和试验 PHP 的 preg_match 和正则表达式。我以为上面的代码会捕获“21”和“53”,但它实际捕获的是“21”和“3”。
这里是 echo var_dump($matches); 的结果
array(3) {
[0]=> string(14) "21st out of 53"
[1]=> string(2) "21"
[2]=> string(1) "3"
}
-
如何编写正则表达式来捕获“53”?我希望答案足够笼统,它还可以捕获“153”和“jkj53hjjk”(这样表达式就不会更改为“/(\d+).*(\b\d+)/”。
如果可以讨论,为什么在捕获第一个数字时,它会如此贪婪,而在捕获第二个数字时,它却不贪婪?它是否向后捕获数字,因此很高兴在找到的第一个数字处停下来?这可以克服吗?
这是我在 Stack Overflow 上的第一篇文章。我对这个问题进行了相当多的研究,但找不到答案。
【问题讨论】:
标签: php regex preg-match