PHP preg_replace - 替换所有出现的内容

时间:2014-07-07 10:47:24

标签: php regex preg-replace repeat

我目前有一大堆PHP替换/删除某些HTML标记模式:

$body = preg_replace('(<p><\/p>)', "", $body);
$body = preg_replace('(<div><br><\/div>)', "", $body);
$body = preg_replace('(<p><br><\/p>)', "", $body);
$body = preg_replace('(<p><ol>)', "<ol>", $body);
$body = preg_replace('(</ol></p>)', "</ol>", $body);

然而,它并没有删除“标签模式”的所有次出现,而只删除第一个。

我在SOF上看到了一些与此类问题相关的问题,但是,我还没有找到一个完全解决了我的问题的问题。

2 个答案:

答案 0 :(得分:0)

要替换所有已知字符串,最好使用str_replace(),因为您确切知道要替换的内容。

答案 1 :(得分:0)

preg_replace没有理由不删除所有匹配项,因为它默认为全局搜索,并且您的模式似乎是正确的。再次查看您的字符串结果,以确保未删除的标记与模式(可能不是这种情况)完全匹配。

但是,由于您要更换固定的子字符串,因此不需要使用正则表达式,更快捷的方法是使用strtr

$trans = array('<p></p>'         => '',
               '<div><br></div>' => '',
               '<p><ol>'         => '<ol>',
               '</ol></p>'       => '</ol>');

$body = strtr($body, $trans);

仅当您要处理带有可选空白字符的可选项时,才需要使用preg_replace。另一种方法,使用DOMDocument

,并不总是非常方便但强大