Как удалить элемент html и его содержимое с помощью RegEx

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

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

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

Спасибо.

Простой ответ заключается в том, что вы этого не делаете. Вместо этого вы используете один из PHP-парсеров PHP. Regexes – уязвимый и подверженный ошибкам способ манипулирования 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, вы можете попробовать что-то еще.