我正在尝试使用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主题编辑器进行编辑。可以想象其他人可能有相同的问题,这个问题将来可能对他们有帮助。
答案 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警告