preg_match для вложенных html-тегов
-
07-07-2019 - |
Вопрос
Я хотел бы перехватить все теги "dev" и их соответствующее содержимое с помощью php preg_match_all()
но не могу получить вложенные файлы.
данные:
<dev>aaa</dev>
<dev>bbb</dev>
<dev>
ccc
<dev>ddd</dev>
</dev>
мое выражение лица до сих пор:
|<dev>(.*)</dev>|Uis
спасибо, за вашу помощь, б.
Решение
Не используйте регулярные выражения для синтаксического анализа.Используйте реальный синтаксический анализатор, такой как DOMDocument ДОМДокумент или SimpleXML ( упрощенный ):
$xml = simplexml_load_string('<root>'.$str.'</root>');
Другие советы
У вас должен быть рекурсивный шаблон сопоставления:
/<dev>(.*|(?R))<\/dev>/i
Это просто поглотит все вложенные элементы, поэтому, если вы хотите затем проанализировать их, вам придется снова запустить функцию для $matches[1]
В *
является жадным оператором, потребляет как можно больше символов.Вы должны использовать *?
вместо этого используйте нежадную версию для поиска наименьших возможных совпадений.Возможно, регулярные выражения - не лучший инструмент для этого.