вырезать HTML-теги с определенным содержимым из строки - PullRequest
0 голосов
/ 16 июля 2010
$text = "<p>keep me</p> <p>strip me &nbsp;</p>
$pattern = "/<[^\/>]*>(\&nbsp\;)*<\/[^>]*>/"; 
$text =  preg_replace($pattern, '', $text);

Привет, мне нужно убрать "квазипустые" теги p из строки html. всегда есть только & nbsp; в качестве триггера в элементе р. как я могу лишить его с помощью регулярных выражений?

Ответы [ 3 ]

1 голос
/ 22 июля 2010

Следующий шаблон будет соответствовать всем <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>/";
0 голосов
/ 16 июля 2010
$text  = preg_replace("!<p>(?:&nbsp;)*</p>!", "", $text);
0 голосов
/ 16 июля 2010
$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;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...