如何删除空的<p>元素?

时间:2016-01-27 08:14:00

标签: php regex

我有以下正则表达式:

$html = '<p></p><p>Lorem ispum...</p><p>  </p><p>;nbsp</p>';
$pattern = "/<p[^>]*><\\/p[^>]*>/";
echo preg_replace($pattern, '', $html );

如果<p>标记实际为空,则仅删除<p></p>标记,即&nbsp;。如果其中包含其他隐身副本,如何将其删除,例如.table.blue

2 个答案:

答案 0 :(得分:0)

有几种可能的空白空间,甚至更多的可能性是空的&#34; (例如,<p><em></em></p>是空的吗?或者不是?)。

还要考虑使用<p class="para"><p id="chief">的可能性。

很大程度上取决于文本的来源。在某些情况下,Microsoft Word会输出&#160; (我可以并且确实没有记住它们 - 抱歉)

现在reasonable的可能性可能是使用#<p>(\\s|&nbsp;)*</p>#mis'这样的正则表达式来匹配多个空行。

但请记住,这种必要条件会迅速变为unreasonable - 例如,类部分可能会强迫您使用#<p[^>]*>(\\s|&nbsp;)*</p>#mis'等等 - 所以,您可能想要开始研究而是一个XML解析器。

答案 1 :(得分:0)

我假设退格,你的意思是空格,而;nbsp&应该是&nbsp;并建议:

$pattern = "/<p[^>]*>(\s|&nbsp;)*<\\/p[^>]*>/";

\s匹配任何空格字符

该模式在\s标记内与|或(&nbsp;*任意(<p>)次数匹配。