Фигурные скобки в регулярных выражения PHP

Операторы +, *, ? хороши, однако, с их помощью нельзя указать конкретное число повторений. В этом случае вам на помощь придет оператор {}.

Работает он следующим образом: {5} - пять повторений, {2,5} - повторяется от двух до пяти (оба включительно), {2,} - повторяется два и более раз.

Пример

В данном примере шаблон поиска выглядит так: буква 'x', буква 'a' один или два раза, буква 'x':

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

В результате в переменную запишется следующее:

'xx ! ! xaaax'

Пример

В данном примере шаблон поиска выглядит так: буква 'x', буква 'a' два раза и более, буква 'x':

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

В результате в переменную запишется следующее:

'xx xax ! !'

Пример

В данном примере шаблон поиска выглядит так: буква 'x', буква 'a' три раза, буква 'x':

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

В результате в переменную запишется следующее:

'xx xax xaax !'

Пример

В данном примере шаблон поиска выглядит так: буква 'a' десять раз:

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

В результате в переменную запишется следующее:

'aaa ! aaa'

Пример

В данном примере автор кода хотел такой шаблон: буква 'x', буква 'a' три раза раза и меньше, буква 'x', но, к сожалению, такое - {,3} - не работает. Нужно указать явно:

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

В результате в переменную запишется следующее:

'xx ! ! !'

Пример

Ноль тоже допустим:

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

В результате в переменную запишется следующее:

'! ! ! !'

Практические задачи

Дана строка:

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

Напишите регулярку, которая найдет строки 'abba', 'abbba', 'abbbba' и только их.

Дана строка:

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

Напишите регулярку, которая найдет строки вида 'aba', в которых 'b' встречается менее трех раз (включительно).

Дана строка:

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

Напишите регулярку, которая найдет строки вида 'aba', в которых 'b' встречается более четырех раз (включительно).