preg_replace_callback返回重复值

时间:2015-05-13 16:48:46

标签: php regex preg-replace preg-replace-callback

我正在尝试了解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返回数组,否则返回字符串。发生了什么事?

1 个答案:

答案 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