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

Операторите +, *, ? са добри, но с тяхна помощ не може да се укаже конкретен брой повторения. В този случай на помощ идва операторът {}.

Работи по следния начин: {5} - пет повторения, {2,5} - повтаря се от две до пет (и двете включително), {2,} - повтаря се два и повече пъти.

Пример

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

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

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

php'xx ! ! xaaax'

Пример

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

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

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

php'xx xax ! !'

Пример

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

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

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

php'xx xax xaax !'

Пример

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

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

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

php'aaa ! aaa'

Пример

В този пример авторът на кода искаше такъв шаблон: буква 'x', буква 'a' три пъти и по-малко, буква 'x', но, за съжаление, такова - {,3} - не работи. Трябва да се укаже изрично:

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

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

php'xx ! ! !'

Пример

Нула също е допустима:

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

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

php'! ! ! !'

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

Задание 1

Даден е низ:

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

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

Задание 2

Даден е низ:

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

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

Задание 3

Даден е низ:

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

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