У меня есть 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, вы можете попробовать что-то еще.