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<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{1,2}x#', '!', $str);
?>

Výsledkom do premennej sa zapíše nasledovné:

php'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<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{2,}x#', '!', $str);
?>

Výsledkom do premennej sa zapíše nasledovné:

php'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<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{3}x#', '!', $str);
?>

Výsledkom do premennej sa zapíše nasledovné:

php'xx xax xaax !'

Príklad

V tomto príklade vyhľadávací vzor vyzerá takto: písmeno 'a' desať krát:

php<?php
  $str = 'aaa aaaaaaaaaa aaa';
  $res = preg_replace('#a{10}#', '!', $str);
?>

Výsledkom do premennej sa zapíše nasledovné:

php'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<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{1,3}x#', '!', $str);
?>

Výsledkom do premennej sa zapíše nasledovné:

php'xx ! ! !'

Príklad

Nula je tiež povolená:

php<?php
  $str = 'xx xax xaax xaaax';
  $res = preg_replace('#xa{0,3}x#', '!', $str);
?>

Výsledkom do premennej sa zapíše nasledovné:

php'! ! ! !'

Praktické úlohy

Задание 1

Daný reťazec:

php<?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.

Задание 2

Daný reťazec:

php<?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).

Задание 3

Daný reťazec:

php<?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).