⊗ppPsRgCP 21 of 84 menu

Problémy parsování regulárními výrazy v PHP

Parsovat tagy regulárními výrazy je možné pouze omezeným způsobem. Problém nastává, pokud parsujeme tag, uvnitř kterého mohou být stejné tagy.

Předpokládejme například, že chceme sparsovat nějaký div:

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

Jak je známo, uvnitř tagů div mohou být i další tagy div:

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

Získáme obsah tohoto bloku:

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

Zkontrolujeme, co jsme zachytili:

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

Výsledkem bude text až po první uzavírací tag div:

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

A tento problém pouze regulárními výrazy nelze vyřešit. V tomto případě je třeba spočítat, kolik tagů div se otevřelo a kolik jich zavřelo. To přesahuje možnosti regulárních výrazů.

Proto jsou regulární výrazy použitelné pouze pro tagy, které uvnitř sebe nemohou obsahovat stejné tagy.

Výkonnějším způsobem je použití speciálních knihoven pro parsování. Takové knihovny umožňují vybírat tagy pomocí CSS selektorů. Studiem těchto knihoven se budeme zabývat v následujících lekcích.

Vyjmenujte tagy, které lze parsovat regulárními výrazy.

idfritdeuz