Perl, Regulární výrazy (34.díl)

Napsal O webu (») 5. 6. 2008 v kategorii Programování, přečteno: 948×
obrazky/logo_perl.jpg

Kvantifikátory

Kvantifikátory jsou symboly, pomocí nichž můžeme specifikovat počet a povinnost opakování určitého znaku či skupiny znaků. Je to vhodné proto, abychom nemuseli výskyt určitého znaku explicitně uvádět vícekrát. V následující tabulce je uvedena základní podoba kvantifikátorů.


KvantifikátorVýznam
*0 nebo více výskytů předcházejícího znaku
+1 nebo více výskytů předcházejícího znaku
?0 nebo 1 výskyt předcházejícího znaku
{počet}Výskyt předcházejícího znaku přesně POČETkrát
{MIN,}Výskyt předcházejícího znaku aspoň MINkrát
{MIN,MAX}Výskyt předcházejícího znaku aspoň MINkrát a nejvíce MAXkrát


Kvantifikátory se vztahují vždy bezprostředně k předcházejícímu znaku, metasymbolu nebo třídě znaků. Chceme-li, aby se vztahovaly k více znakům, je třeba tyto znaky seskupit pomocí kulatých závorek.



/abc*/

//odpovídá řetězci 'ab', 'abc', 'abcc' atd.

/a(bc)*/

//odpovídá řetězci 'a', 'abc', 'abcbc' atd.




Důležitou vlastností kvantifikátorů je, že se chovají tzv. hladově. Znamená to, že snaží pohltit tak velkou část řetězce, jak je to jenom možné. Chceme-li, aby se našel řetězec o minimální délce, který stále vyhovuje zadanému vzoru, je třeba za kvantifikátorem uvést znak ?. Použitím takového, takzvaně líného kvantifikátoru, provádíme minimální hledání.



$html = "<B>Text</B>";

$html = ~ /<(.*)>/;

// maximální hledání
// proměnná $1 obsahuje řetězec 'B>Text</B'

$html = ~ /<(.*)>/;

// minimální hledání
// proměnná $1 obsahuje řetězec 'B'




Líných kvantifikátorů je stejný počet jako hladových kvantifikátorů. Rozdíl mezi { N } a {N}? není, oba případy znamenají výskyt přesně Nkrát. V následující tabulce je uvedena podoba tzv. „líných“ kvantifikátorů.


KvantifikátorVýznam
*?0 nebo více výskytů předcházejícího znaku
+?1 nebo více výskytů předcházejícího znaku
??0 nebo 1 výskyt předcházejícího znaku
{počet}?Výskyt předcházejícího znaku přesně POČETkrát
{MIN,}?Výskyt předcházejícího znaku aspoň MINkrát
{MIN,MAX}?Výskyt předcházejícího znaku aspoň MINkrát a nejvíce MAXkrát


A to by bylo pro dnešek všechno. V dalším díle se podíváme na modifikátory. V případě jakýchkoliv dotazů mě kontaktujte na email: habrman@banan.cz.


Autor: Robert Habrman
Štítky: Perl
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel deset a šest