使用PHP中的正则表达式删除不需要的标记

时间:2011-12-14 07:04:39

标签: php regex

我想从我的字符串中删除<p>标记,其中包含空格或空格或<br />。我试过这个

$html = "abc<p>&nbsp;</p><p></p><p> </p><p><br /></p><p>dd</p><b>non-empty</b>"; 
$pattern = "/<p[^>]*>(&nbsp;|\s)<\\/p[^>]*>/"; 
//$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/"; use this pattern to remove any empty tag

echo preg_replace($pattern, '', $html); 

这很好用。它只删除空格。提前谢谢。

2 个答案:

答案 0 :(得分:0)

这样的事情:

$result = preg_replace('#<p[^>]*>(\s|&nbsp;?)*</p>#', '', $html);

答案 1 :(得分:0)

你必须仔细建立你的正则表达式......这是一个解决方案:

  • 首先构建一个与<br />匹配任意数量的空格或&nsbp;的正则表达式:

$special = "(?:<br\\s*/>|&nbsp;)";

  • 然后是一个匹配空格的正则表达式:

$normal = "\\s";

  • 然后您使用经典的normal* ( special normal* ) *模式:

$re = "<p\\s*>$normal*($special$normal*)*</p\\s*>";

  • 这应该产生正确的结果,它适用于任何空格或br标签的组合:

echo preg_replace("$re", "", $html);