Nawiasy klamrowe w wyrażeniach regularnych PHP
Operatory +, *, ? są dobre,
jednak za ich pomocą nie można określić konkretnej
liczby powtórzeń. W tym przypadku z pomocą
przychodzi operator {}.
Działa on w następujący sposób: {5}
- pięć powtórzeń, {2,5} - powtarza się
od dwóch do pięciu (oba włącznie), {2,}
- powtarza się dwa lub więcej razy.
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'x', litera 'a' jeden
lub dwa razy, litera 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,2}x#', '!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'xx ! ! xaaax'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'x', litera 'a' dwa
razy lub więcej, litera 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{2,}x#', '!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'xx xax ! !'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'x', litera 'a' trzy
razy, litera 'x':
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{3}x#', '!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'xx xax xaax !'
Przykład
W tym przykładzie wzorzec wyszukiwania wygląda tak:
litera 'a' dziesięć razy:
<?php
$str = 'aaa aaaaaaaaaa aaa';
$res = preg_replace('#a{10}#', '!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'aaa ! aaa'
Przykład
W tym przykładzie autor kodu chciał taki wzorzec:
litera 'x', litera 'a' trzy
razy i mniej, litera 'x',
ale niestety, takie - {,3} - nie
działa. Należy podać jawnie:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{1,3}x#', '!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'xx ! ! !'
Przykład
Zero też jest dozwolone:
<?php
$str = 'xx xax xaax xaaax';
$res = preg_replace('#xa{0,3}x#', '!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'! ! ! !'
Zadania praktyczne
Dany jest ciąg:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napisz wyrażenie regularne, które znajdzie ciągi
'abba', 'abbba', 'abbbba'
i tylko je.
Dany jest ciąg:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napisz wyrażenie regularne, które znajdzie ciągi
typu 'aba', w których 'b' występuje
mniej niż trzy razy (włącznie).
Dany jest ciąg:
<?php
$str = 'aa aba abba abbba abbbba abbbbba';
?>
Napisz wyrażenie regularne, które znajdzie ciągi
typu 'aba', w których 'b' występuje
więcej niż cztery razy (włącznie).