在每个段落中替换

时间:2012-03-26 14:27:33

标签: php regex

$var中有一些代码。我正在尝试在每个nl2br()内的文本上运行<p></p>

echo preg_replace('/<p>(.*?)</p>/i', nl2br('${1}'), $var);

此代码不起作用。

我该如何解决这个问题?

3 个答案:

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