在preg_replace_callback中指定回调函数?

时间:2009-09-21 22:32:37

标签: php regex

我有一些像这样的代码(这是一个简化的例子):

function callback_func($matches) {
  return $matches[0] . "some other stuff";
}

function other_func($text) {
  $out = "<li>"; 
  preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
  $out .= $desc ."</li> \r\n";
  return $out;
}

echo other_func("This is a _test");

这个的输出应该是

<li>This is a _testsome other stuff</li>

但我得到了

<li>This is a _test</li>

我做错了什么/安抚php神需要什么奇怪的咒语?

3 个答案:

答案 0 :(得分:5)

preg_replace_callback不会修改字符串,而是返回它的修改后的副本。尝试以下instread:

function other_func($text) {
    $out = "<li>"; 
    $out .= preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);
    $out .= "</li> \r\n";
    return $out;
}

答案 1 :(得分:0)

问题是你永远不会将函数的输出附加到$ out变量中。所以在callback_func()中你必须使用:

$out .= $matches[0] . "some other stuff";

然后它会将结果添加到字符串中供您输出。事实上,你只是返回一个值并且不做任何事情。

答案 2 :(得分:0)

想出来。 preg_replace_callback不会修改原始主题,我认为它确实如此。我不得不改变

preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);

$desc = preg_replace_callback("/_[a-zA-Z]*/","callback_func",$desc);