我看到了像
这样的代码<?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吗?
答案 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}}。