preg_replace_callback returns 重复值
preg_replace_callback returns duplicate values
我正在尝试了解 preg_replace_callback
函数。在我的回调中,我得到匹配的字符串两次,而不是它出现在主题字符串中的一次。您可以 go here and copy/paste this code 进入测试器并看到它 returns 两个值,而我期望一个值。
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 返回数组,否则返回字符串。发生什么事了?
您在 $match[0]
中有完整的模式匹配 \b(http(s)?://\S+)
,在 $match[1]
中有括号捕获组 (http(s)?://\S+)
的匹配。
在这种情况下,只需使用 $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
。
我正在尝试了解 preg_replace_callback
函数。在我的回调中,我得到匹配的字符串两次,而不是它出现在主题字符串中的一次。您可以 go here and copy/paste this code 进入测试器并看到它 returns 两个值,而我期望一个值。
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 返回数组,否则返回字符串。发生什么事了?
您在 $match[0]
中有完整的模式匹配 \b(http(s)?://\S+)
,在 $match[1]
中有括号捕获组 (http(s)?://\S+)
的匹配。
在这种情况下,只需使用 $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
。