PHP - Strings - Удалить HTML-тег с определенным классом, включая его содержимое. - PullRequest
9 голосов
/ 30 июня 2010

У меня есть такая строка:

<div class="container">
  <h3 class="hdr"> Text </h3>
  <div class="main">
    text
    <h3> text... </h3>
    ....

  </div>
</div>

как мне удалить тег H3 с классом .hdr, используя как можно меньше кода?

Ответы [ 5 ]

19 голосов
/ 30 июня 2010

Как возможно использовать маленький код?Самый короткий код не обязательно лучший.Однако, если ваш HTML h3 тег всегда выглядит так, этого должно быть достаточно:

$html = preg_replace('#<h3 class="hdr">(.*?)</h3>#', '', $html);

Вообще говоря, использование регулярных выражений для разбора HTML не очень хорошая идея.

3 голосов
/ 30 июня 2010

Что-то вроде этого - то, что вы ищете ...

$output = preg_replace("#<h3 class=\"hdr\">(.*?)</h3>#is", "", $input);

Используйте «is» в конце регулярного выражения, потому что это сделает его нечувствительным к регистру, что более гибко.

1 голос
/ 30 июня 2010

попробуйте preg_match, а затем preg_replace по следующему шаблону:

/(<h3
[\s]+
[^>]*?
class=[\"\'][^\"\']*?hdr[^\"\']*?[\"\']
[^>]*?>
[\s\S\d\D\w\W]*?
<\/h3>)/i

Это грязно, и должно работать нормально, только если тег h3 не имеет встроенного JavaScript, который может содержать последовательности, на которые будет реагировать это регулярное выражение. Это далеко от совершенства, но в простых случаях, когда используется тег h3, он должен работать.

Хотя не пробовал, может потребоваться корректировка.

Другим способом было бы скопировать эту функцию, использовать вашу копию без h3, если это возможно.

0 голосов
/ 08 октября 2018

Это поможет кому-то, если вышеуказанные решения не работают. Он удаляет iframe и контент, имеющий тег '-webkit-overflow-scrolling: touch;' как у меня было:)

RegEx, или регулярные выражения - это код для того, что вы хотели бы удалить, и функция PHP preg_replace () удалит все соответствующие div или div или заменит их чем-то другим. В приведенных ниже примерах, в $ input_data вы помещаете весь свой контент перед удалением элементов, а $ result является конечным продуктом. По сути, мы говорим коду найти все div с помощью class = ”myclass” и заменить их на ”” (none).

Как удалить div и его содержимое по классам в PHP Просто измените «myclass» на тот класс, который есть у вашего div.

 $result = preg_replace('#<div class="myclass">(.*?)</div>#', ' ',
 $incoming_data);

Как удалить div и его содержимое по ID в PHP Просто измените «myid» на любой идентификатор, который есть у вашего div.

$ result = preg_replace ('# (. *?) #', '', $ Input_data);

Если у вашего div есть несколько классов? Просто измените «myid» на любой идентификатор, который есть у вашего div.

$result = preg_replace('#<div id="myid(.*?)</div>#', ' ', $incoming_data);
or if div don’t have an ID, filter on the first class of the div like this.
$result = preg_replace('#<div class="myclass(.*?)</div>#', ' ', $incoming_data);

Как убрать все заголовки в PHP Это как удалить все заголовки.

$result = preg_replace('#<h1>(.*?)</h1>#', ' ', $incoming_data);
and if the heading have a class, do something like this:
$result = preg_replace('#<h1 class="myclass">(.*?)</h1>#', ' ', $incoming_data);

Источник: http://www.lets -develop.com / html5-html-css-css3-php-wordpress-jquery-javascript-photoshop-illustrator-flash-tutorial / php-программирования / remove-div-by- класс PHP-удалить-Div-содержание /

0 голосов
/ 08 января 2015

$ content = preg_replace ('~ (. *?) ~', '', $ Content);

Приведенный выше код работает только в том случае, если элементы div находятся в одной строке. что если они не?

$ content = preg_replace ('~ [^ |] *? ~', '', $ Content);

Это работает, даже если между ними есть разрыв строки, но не работает, если не используется | Символ между кем-нибудь знает лучший способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...