PHP, preg_match, выбор части многих тегов div

#php #html-parsing #pcre

#php #html-синтаксический анализ #pcre

Вопрос:

итак, мне нужно взять весь div с классом «1», но он останавливается на окончании класса div «1.1», поэтому я хочу получить из этого:

 <head>
</head>
<body>
    <div class="1">
        <p>blah blah blah</p>
        <div class="1.1">
            trolololol
        </div>
        <div class="1.2">
            trolo2lolo
        </div>
    </div>
</body>
  

только это:

 <div class="1">
    <p>blah blah blah</p>
    <div class="1.1">
        trolololol
    </div>
    <div class="1.2">
        trolo2lolo
    </div>
</div>
  

но пока я получаю только:

 <div class="1">
    <p>blah blah blah</p>
    <div class="1.1">
        trolololol
    </div>
  

Ответ №1:

Регулярные выражения не настолько умны, чтобы подсчитывать, сколько тегов вы открыли, и их нужно закрыть перед остановкой сопоставления. Это останавливается при первом появлении </div> . Попробуйте использовать настоящий анализатор html, если вы хотите получить доступ к тегам как к реальным тегам, а не как к строкам.

Ответ №2:

Регулярные выражения не должны использоваться для анализа документов, таких как XML, HTML, «BBCode», JSON… Вам следует поискать настоящий анализатор DOM, например, расширение DOM в PHP