在$var
中有一些代码。我正在尝试在每个nl2br()
内的文本上运行<p></p>
。
echo preg_replace('/<p>(.*?)</p>/i', nl2br('${1}'), $var);
此代码不起作用。
我该如何解决这个问题?
答案 0 :(得分:2)
您可能需要转义<\/p>
答案 1 :(得分:1)
看起来preg_replace_callback
可能就是您要找的内容:http://us3.php.net/manual/en/function.preg-replace-callback.php
ETA:在您的具体示例中,您可以使用匿名函数(仅当您执行此操作一次或两次,否则会占用内存)或定义辅助函数
function nl2br_wrapper($matches)
{
return "<p>".nl2br($matches[1])."</p>";
}
preg_replace_callback('/<p>(.*?)<\/p>/si', "nl2br_wrapper", $var);
答案 2 :(得分:0)
与内核一样,你可以使用匿名函数(PHP 5)
function replaceText($data, $html)
{
$callback = function ($matches) use ($data){
return ( isset($data[$matches[1]]) )
? nl2br($data[$matches[1]])
: $matches[0];
};
return preg_replace_callback(
'/\<p>(.*?)\</p>',
$callback,
$html);
}
echo replaceText($replace_with, $html);