Preg匹配回调无效

时间:2017-03-14 23:10:21

标签: php regex preg-replace-callback

我正在尝试编写一个函数来替换任何以PID开头和结尾的数字。我认为问题在于正则表达式,但我无法弄清楚。代码如下。我也试过(。)而不是(。*) - 没有区别。我知道我将不得不遍历matches数组以获取所有出现但我想让基本代码先工作。有人请指出问题吗?

    function DoLinks($matches) {
     return ($matches[0]='<a href="someplace.com">Some place</a>');
    } 

    function Buildinks($text) {
      preg_replace_callback(
         "/PID(.*)PID/",
         "DoLinks",
         $text);
      return $text;
    }

    $text = "hello PID(199)PID";
    $text = Buildinks($text);
    echo $text;

1 个答案:

答案 0 :(得分:0)

函数preg_replace_callback返回一个值,您可以在Buildinks函数中返回该值。

可以在DoLink中删除$matches[0]=

正则表达式现在有一个懒惰的匹配.*? 以防万一你有超过1个PID的文本。

<?php
function DoLinks($matches) {
    $pid = $matches[1];
    return '<a href="someplace.com">Some place with pid '.$pid.'</a>';
} 

function Buildinks($text) {
    return preg_replace_callback('/PID\((.*?)\)PID/', 'DoLinks', $text);
}

$text = "hello PID(199)PID and hello PID(200)PID";
$text = Buildinks($text);
echo $text;