从字符串中删除包含特定内容的HTML标记

时间:2010-07-16 14:57:30

标签: php regex

$text = "<p>keep me</p> <p>strip me &nbsp;</p>
$pattern = "/<[^\/>]*>(\&nbsp\;)*<\/[^>]*>/"; 
$text =  preg_replace($pattern, '', $text);

嗨,我需要从html字符串中删除“准空”p标签。总是只有一个&amp; nbsp;作为p元素的触发器。我怎样才能用正则表达式去除它?

3 个答案:

答案 0 :(得分:1)

根据您的示例,以下模式将匹配包含<p> </p>的所有&nbsp;块以及任何随附文本。

$text = "<p>keep me</p> <p>strip me &nbsp;</p>";
$pattern = "/<p>[^<]*&nbsp\;[^<]*<\/p>/"; 
$output =  preg_replace($pattern, '', $text);

如果您确实希望它仅使用<p> </p>和空格删除&nbsp;块,请改用以下模式:

$pattern = "/<p>(\s*&nbsp\;\s*)+<\/p>/"; 

如果您只想删除<p> </p>以及最多一定数量字符的&nbsp;块,请使用以下内容(根据需要设置$maxChars个变量) :

$maxCharsBefore = 10;
$maxCharsAfter = 10;
$pattern = "/<p>[^<]{0,".$maxCharsBefore."}&nbsp\;[^<]{0,".$maxCharsAfter."}<\/p>/";

答案 1 :(得分:0)

$text = "<p>keep me</p> <p>strip me &nbsp;</p>";
str_replace('&nbsp;','',$text);

完成工作

哟有很多学习要做:http://www.regular-expressions.info/conditional.html


<?php
$text = "<p>keep me</p> <p>strip me &nbsp;</p><div class=\"someclass\">div</div>";
$newtext = "";
preg_match_all("/(\<.*?>.*?<\/.*?>)/",$text,$matches);
foreach($matches[0] as $tag)
{
    if(!strstr($tag,'&nbsp;'))
    {
        $newtext .= $tag;
    }
}
echo $newtext;
?>

答案 2 :(得分:0)

$text  = preg_replace("!<p>(?:&nbsp;)*</p>!", "", $text);