Složené závorky v regulárních výrazech PHP

Operátory +, *, ? jsou dobré, ale nelze jimi určit konkrétní počet opakování. V tomto případě vám pomůže operátor {}.

Funguje následovně: {5} - pět opakování, {2,5} - opakuje se dvakrát až pětkrát (včetně), {2,} - opakuje se dvakrát a vícekrát.

Příklad

V tomto příkladu vypadá vyhledávací vzor takto: písmeno 'x', písmeno 'a' jednou nebo dvakrát, písmeno 'x':

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

Výsledkem bude, že se do proměnné zapíše následující:

php'xx ! ! xaaax'

Příklad

V tomto příkladu vypadá vyhledávací vzor takto: písmeno 'x', písmeno 'a' dvakrát a vícekrát, písmeno 'x':

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

Výsledkem bude, že se do proměnné zapíše následující:

php'xx xax ! !'

Příklad

V tomto příkladu vypadá vyhledávací vzor takto: písmeno 'x', písmeno 'a' třikrát, písmeno 'x':

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

Výsledkem bude, že se do proměnné zapíše následující:

php'xx xax xaax !'

Příklad

V tomto příkladu vypadá vyhledávací vzor takto: písmeno 'a' desetkrát:

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

Výsledkem bude, že se do proměnné zapíše následující:

php'aaa ! aaa'

Příklad

V tomto příkladu autor kodu chtěl takový vzor: písmeno 'x', písmeno 'a' třikrát a méně, písmeno 'x', ale bohužel toto - {,3} - nefunguje. Je třeba uvést explicitně:

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

Výsledkem bude, že se do proměnné zapíše následující:

php'xx ! ! !'

Příklad

Nula je také povolena:

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

Výsledkem bude, že se do proměnné zapíše následující:

php'! ! ! !'

Praktické úlohy

Задание 1

Je dán řetězec:

php<?php
  $str = 'aa aba abba abbba abbbba abbbbba';
?>

Napište regulární výraz, který najde řetězce 'abba', 'abbba', 'abbbba' a pouze je.

Задание 2

Je dán řetězec:

php<?php
  $str = 'aa aba abba abbba abbbba abbbbba';
?>

Napište regulární výraz, který najde řetězce tvaru 'aba', ve kterých se 'b' vyskytuje méně než třikrát (včetně).

Задание 3

Je dán řetězec:

php<?php
  $str = 'aa aba abba abbba abbbba abbbbba';
?>

Napište regulární výraz, který najde řetězce tvaru 'aba', ve kterých se 'b' vyskytuje více než čtyřikrát (včetně).