Preg_replace不会删除找到的标签之间的文本

时间:2019-06-05 12:16:10

标签: php regex wordpress preg-replace

我正在尝试使用preg_replace删除字符串中的所有标题。它是wordpress摘录功能的一部分,可删除帖子正文中的所有<h3>Title</h3>标签,因为它们会破坏段落的流程。

所以目标是在诸如

的字符串中

"<p>Here is some info.</p><h2>A new section</h2><p>Here is some more info.</p>"

我的输出字符串应该是

"<p>Here is some info.</p><p>Here is some more info.</p>"

我可以肯定我的正则表达式是正确的。但是preg_replace似乎没有删除标题标签。

    $regex = array (
            '\<h1[^]]*\>(.*?)\</h1\>',
            '\<h2[^]]*\>(.*?)\</h2\>',
            '\<h3[^]]*\>(.*?)\</h3\>',
            '\<h4[^]]*\>(.*?)\</h4\>',
            '\<h5[^]]*\>(.*?)\</h5\>',
            '\<h6[^]]*\>(.*?)\</h6\>'
            );

    preg_replace($regex, '', $text);

标记内的文本牢牢固定在原处,即。

"<p>Here is some info.</p><h2>A new section</h2><p>Here is some more info.</p>"

编辑:没意识到我的查询缺少定界符。与其他问题类似,但由于没有收到错误,因此无法通过谷歌搜索“定界符”错误来找到它们。由于当时无法访问ftp,因此未打开网站上的PHP错误报告。只需通过wordpress主题编辑器进行编辑。可以想象其他人可能有相同的问题,这个问题将来可能对他们有帮助。

1 个答案:

答案 0 :(得分:1)

您的示例代码没有得到任何警告吗? 以下按预期方式工作

$text = "<p>Here is some info.</p><h2>A new section</h2><p>Here is some more info.</p>";
$regex = array (
    '#\<h1[^]]*\>(.*?)\</h1\>#',
    '#\<h2[^]]*\>(.*?)\</h2\>#',
    '#\<h3[^]]*\>(.*?)\</h3\>#',
    '#\<h4[^]]*\>(.*?)\</h4\>#',
    '#\<h5[^]]*\>(.*?)\</h5\>#',
    '#\<h6[^]]*\>(.*?)\</h6\>#'
);

$replaced = preg_replace($regex, '', $text);

echo $text;
echo PHP_EOL;
echo $replaced;

编辑

检查您是否禁用了PHP警告