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.