Как я могу удалить элемент HTML и его содержимое с помощью RegEx
У меня есть идентификатор div, как удалить из вывода, который выглядит как
<div id="ithis" class="cthis">Content here which includes other elements etc..) </div>
Как я могу удалить этот div и все внутри него, используя PHP и регулярные выражения?
Спасибо.
3 ответа
Простой ответ заключается в том, что вы этого не делаете. Вместо этого вы используете один из множества 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();
Я не знаю о PHP, но вы можете заменить /<id.*?<\/id[^>]*>/
ни с чем.
PHP на стороне сервера, а вывод поступает с сервера. Вы не можете просто не выводить его? Или ты пытаешься это скрыть? Если да, то в таблице стилей просто скажите #ithis {display:none}
,
Если строка является возвращением какой-то функции в PHP, которую вы не написали, и вы не хотите портить этот код, вы должны написать очень сложное регулярное выражение для учета вложенных элементов div, различного синтаксиса в выводе и т. Д. Я бы порекомендовал вам использовать какой-то парсер (возможно, этот компонент Zend Framework). Я использовал это несколько раз для чего-то подобного. Хотя, если вы совсем не знакомы с ZF, вы можете попробовать что-то еще.