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
$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í:
'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
$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í:
'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
$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í:
'xx xax xaax !'
Příklad
V tomto příkladu vypadá vyhledávací vzor takto:
písmeno 'a' desetkrát:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
Výsledkem bude, že se do proměnné zapíše následující:
'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
$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í:
'xx ! ! !'
Příklad
Nula je také povolena:
<?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í:
'! ! ! !'
Praktické úlohy
Je dán řetězec:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napište regulární výraz, který najde řetězce
'abba', 'abbba', 'abbbba'
a pouze je.
Je dán řetězec:
<?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ě).
Je dán řetězec:
<?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ě).