我有一些像这样的代码(这是一个简化的例子):
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神需要什么奇怪的咒语?
答案 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);