Zložené zátvorky v regulárnych výrazoch PHP
Operátory +, *, ? sú dobré,
avšak s ich pomocou nie je možné špecifikovať konkrétny
počet opakovaní. V tomto prípade vám príde na pomoc
operátor {}.
Funguje nasledovne: {5}
- päť opakovaní, {2,5} - opakuje sa
od dvoch do piatich (oba vrátane), {2,}
- opakuje sa dva a viackrát.
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
písmeno 'x', písmeno 'a' raz
alebo dva krát, písmeno 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'xx ! ! xaaax'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
písmeno 'x', písmeno 'a' dva
krát a viac, písmeno 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'xx xax ! !'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
písmeno 'x', písmeno 'a' tri
krát, písmeno 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'xx xax xaax !'
Príklad
V tomto príklade vyhľadávací vzor vyzerá takto:
písmeno 'a' desať krát:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'aaa ! aaa'
Príklad
V tomto príklade autor kodu chcel takýto vzor:
písmeno 'x', písmeno 'a' tri
krát a menej, písmeno 'x',
ale, bohužiaľ, takéto - {,3} - nefunguje.
Treba špecifikovať explicitne:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'xx ! ! !'
Príklad
Nula je tiež povolená:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
Výsledkom do premennej sa zapíše nasledovné:
'! ! ! !'
Praktické úlohy
Daný reťazec:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napíšte regulárny výraz, ktorý nájde reťazce
'abba', 'abbba', 'abbbba'
a len ich.
Daný reťazec:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napíšte regulárny výraz, ktorý nájde reťazce
tvaru 'aba', v ktorých sa 'b' vyskytuje
menej ako trikrát (vrátane).
Daný reťazec:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napíšte regulárny výraz, ktorý nájde reťazce
tvaru 'aba', v ktorých sa 'b' vyskytuje
viac ako štyrikrát (vrátane).