Как я могу удалить элемент HTML и его содержимое с помощью RegEx - PullRequest
6 голосов
/ 12 июля 2009

У меня есть идентификатор div, который я хотел бы удалить из вывода, который выглядит как

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div>

Как я могу удалить этот div и все внутри него, используя PHP и регулярные выражения?

Спасибо.

Ответы [ 3 ]

13 голосов
/ 12 июля 2009

Простой ответ - нет. Вместо этого вы используете один из множества HTML-парсеров PHP. Регулярные выражения - это грубый и подверженный ошибкам способ манипулирования HTML.

Как говорится, вы можете сделать это:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html);

Но многие вещи могут ошибаться. Например, если это содержит div:

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div>

вы получите:

 other elements etc..) </div>

как регулярное выражение остановится на первом </div>. И нет, вы ничего не можете сделать, чтобы последовательно решить эту проблему (с помощью регулярных выражений).

С парсером это выглядит примерно так:

$doc = new DOMDocument();
$doc->loadHTML($html);
$element = $doc->getElementById('ithis');
$element->parentNode->removeChild($element);
$html = $doc->saveHTML();
1 голос
/ 12 июля 2009

Я не знаю о PHP, но вы можете заменить /<id.*?<\/id[^>]*>/ ничем.

0 голосов
/ 12 июля 2009

PHP на стороне сервера, а вывод поступает с сервера. Вы не можете просто не выводить его? Или вы пытаетесь это скрыть? Если это так, в таблице стилей просто скажите #ithis {display:none}.

Если строка является возвращением какой-то функции в PHP, которую вы не написали, и вы не хотите гадить с этим кодом, вы должны написать очень сложное регулярное выражение для учета вложенного div, меняя синтаксис вывод и т. д. Я бы порекомендовал вам использовать какой-нибудь парсер (возможно, этот компонент Zend Framework ). Я использовал это несколько раз для чего-то подобного. Хотя, если вы совсем не знакомы с ZF, вы можете попробовать что-нибудь еще.

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