Есть шаблон вида:
<section name="myname1">
...
<div name="myname2">
...
<p name="myname3">
...
</p>
...
</div>
...
</section>
<div name="myname4">
...
<div name="myname5">
...
</div>
...
</div>
Задача в том чтобы
найти все элементы DOM у которых есть атрибут «name» верхнего уровня со всеми вложенными в него элементами. При этом атрибут может содержать текст на кириллице, собственно так же как и вложенные конструкции в него.
Библиотеки я использовать не могу (есть требование заказчика исключить зависимости).
Первый подход к снаряду был такой:
/<\s*([a-z0-9]*)\b[^>]*\bname\s*=\s*\"([^\"]*)[^>]*>(?>(?:[^<]|<(?!\s*\/?\1\s*\b))|(<\s*\1[^>]*>(?>(?:[^<]|<(?!\s*\/?\s*\1\s*\b))|(?3))+?<\s*\/\s*\1\s*>))*<\/\1>/is
Это работает до тех пор, пока вложенность тега « ... » не вырастает более чем в 700 строк. После чего регулярное выражение просто ничего не находит. Но тут есть момент, например, если поставить вместо тега «section» тег «div», все будет работать.
Другие изыскания:
Пробовал реализацию через PHPDocument, но там возникли проблемы с кодировкой (штука в том, что я не знаю в какой кодировке будет использован разрабатываемый скрипт).
Пробовал, сначала найти « .*», а потом через функцию «preg_match_all» с флагом «PREG_OFFSET_CAPTURE» найти количество открывающихся и закрывающихся одноименных тегов и их позиции в строке, с последующим вычислением конечного закрывающего тега для искомого. Но и тут я споткнулся об пресловутую кириллицу.
Пробовал
XPath, не могу добиться чтобы он корректно переваривал не до конца валидную верстку. Особенно сильно ругается на использование svg инлайном. В завершении бросает критическую ошибку:
Uncaught exception 'Exception' with message 'String could not be parsed as XML' in ...:748 Stack trace: #0 ... (748): SimpleXMLElement->__construct('