Проблемы парсинга регулярками в PHP

Парсить теги регулярками можно только ограниченным образом. Проблема возникает, если мы парсим тег, внутри которого могут быть такие же теги.

Пусть, например, мы хотим спарсить некоторый div:

<div id="wrapper"> text </div>

Как известно, внутри тегов div могут быть и другие теги div:

<div id="wrapper"> <div> text </div> <div> text </div> </div>

Получим содержимое этого блока:

<?php preg_match('#<div\sid="wrapper">(.+?)</div>#su', $str, $match); ?>

Проверим, что мы поймали:

<?php var_dump($match[1]); ?>

В результате будет получен текст до первого закрывающего тега div:

<div id="wrapper"> <div> text </div>

И эта проблема только регулярными выражениями не решается. В данном случае нужно считать, сколько тегов div открылось и сколько закрылось. Это выходит за рамки возможностей регулярок.

Поэтому регулярки применимы только к тем тегам, которые не могут содержать внутри себя такие же.

Более мощным способом является использование специальных библиотек для парсинга. Такие библиотеки позволяют выбирать теги через CSS селекторы. Изучением этих библиотек мы и займемся в следующих уроках.

Перечислите теги, которые можно парсить регулярками.



Чат с GPT Компилятор