#php #регулярные_выражения
У меня есть такой HTML-код: Я составил для этого кода регулярное выражение: \\\ \ \<\/div\> Но оно, почему-то, пишет, что нет совпадений. Кто знает в чём дело?
Ответы
Ответ 1
Для манипуляций с HTML лучше пользоваться HTML-парсером. Вот пример использования PHP DomDocument для удаления определенных тегов вместе с их содержимым: $html = <<Start
DATA; $dom = new DOMDocument('1.0', 'UTF-8'); // Инициализация DOMDocument $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); // Заполнение структуры данными $xpath = new DOMXPath($dom); // Инициализация DOMXPath нашими данными $divs = $xpath->query('//div[@id="community_header" and @class="wcommunity_header"]'); // Запрос XPath foreach ($divs as $div) { $div->parentNode->removeChild($div); // Удаление найденных элементов } echo $dom->saveHTML(); См. демо этого кода. Запрос XPath означает: //div - найди все div, в которых [@id="community_header" - атрибутidравенcommunity_header` and - а также @class="wcommunity_header"] - атрибут class равен wcommunity_header.
Ответ 2
Не работает из-за того, что вот в этом месте \\< ^^^^ как и в других, потерялись перевод строки и пробельные символы. Следующая ошибка в жадном захвате:Скорее всего эта конструкция сожрёт всё до конца, так что так делать не надо. Как можно было бы попробовать: Все пробелы заменять на \s+ или \s*. Найти начало первого divа. Промотать в нём всё, что не связано с divами (?!]*)?>((?! получается ((?!]*)?>((?!)* Взять закрывывающий тег divа:
((?!]*)?>((?!)*
Комментариев нет:
Отправить комментарий