我正在尝试了解preg_replace_callback
功能。在我的回调中,我得到匹配的字符串两次而不是它在主题字符串中出现的一次。您可以go here and copy/paste this code进入测试人员,看到它在我期望的时候返回两个值。
preg_replace_callback(
'"\b(http(s)?://\S+)"',
function($match){
var_dump($match);
die();
},
'http://a'
);
输出如下:
array(2) { [0]=> string(8) "http://a" [1]=> string(8) "http://a" }
如果主题是数组,则documentation mentions返回数组,否则返回字符串。发生了什么事?
答案 0 :(得分:3)
\b(http(s)?://\S+)
中的完整模式匹配$match[0]
以及(http(s)?://\S+)
中括号内的捕获组$match[1]
匹配。
在这种情况下,只需使用$match[0]
之类的内容:
$result = preg_replace_callback(
'"\b(http(s)?://\S+)"',
function($match){
return $match[0] . '/something.php';
},
'http://a'
);
用http://a
替换http://a/something.php
。