了解preg_replace函数的工作原理

时间:2015-08-21 16:54:17

标签: php regex preg-replace

我看到了像

这样的代码
<?php
$str = 'foo   112';
$str = preg_replace('/[0-9]+/', '2000', $str);
// This will be 'foo o' now
echo $str;
?>

输出类似于foo 2000。我很困惑,因为我知道[0-9] +检查范围内的数字和一个或多个。它不应该像200020002000一样产生o / p吗?

2 个答案:

答案 0 :(得分:2)

&#39; +&#39;在[0-9] +中将使它查找一串数字(只有一个数字也是一个字符串)并用&#39; 2000&#39;替换它们。
这个表达式如下:

(...,$str) 

^看看$ str

'foo 112'

(..[0-9]..) 

^搜索号码

'...1..' //Found one (literally)

(...]+..) 

^检查下一个索引以查看匹配您刚才要查找的内容

'...11..' //Still a number
'...112' //Still a number

还有吗?不,你最终得到了什么? &#39; 112&#39;

(..., '2000',..) 

^替换你所拥有的&#39; 2000&#39;

Result: 'foo 2000'

*如果它只是[0-9],它将按预期工作。

答案 1 :(得分:1)

'/[0-9]+/会同时匹配所有数值,+表示一次或多次出现,然后2000表示替换与{'/[0-9]+/匹配的2000 1}}。