PHP preg_replace-替换所有发生的事件

PHP preg_replace-替换所有发生的事件,php,regex,preg-replace,repeat,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(

我目前有一块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上看到了一些与此类问题相关的问题,我还没有找到一个可以完全解决我的问题的方法。

要替换已知字符串的所有匹配项,最好使用它,因为您确切知道要替换的内容。

preg\u replace没有理由不删除所有匹配项,因为它默认情况下会进行全局搜索,而且您的模式似乎是正确的。第二次查看字符串结果,以确保未删除的标记与模式匹配—情况可能并非如此

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


只有当您想处理可选字符和可选空白字符时,才需要使用preg_replace。另一种方法,虽然不总是很方便,但很健壮,就是使用DOMDocument。

您似乎在搜索文本。你为什么用preg_uu而不是str_uu?你是想去掉不必要的标签吗?比如你的html代码有:blablableble
$trans = array('<p></p>'         => '',
               '<div><br></div>' => '',
               '<p><ol>'         => '<ol>',
               '</ol></p>'       => '</ol>');

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