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átor | Vý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átor | Vý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