Оператори за повторение на символи в регулярни изрази

Има ситуации, в които искаме да укажем, че символът се повтаря зададен брой пъти. Ако знаем точния брой повторения, можем просто да го напишем няколко пъти - #aaaa#. Но какво да правим, ако искаме да кажем нещо такова: повтори се един или повече пъти?

За това съществуват оператори (квантификатори) за повторение: плюс + (един или повече пъти), звездичка * (нула или повече пъти) и въпрос ? (нула или един път). Тези оператори действат върху символа, който стои пред тях.

Нека разгледаме работата на тези оператори с примери.

Пример

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

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

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

php'xx ! ! ! xbx'

Пример

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

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

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

php'! ! ! ! xbx'

Пример

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

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

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

php'! ! xaax xbx'

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

Задание 1

Даден е низ:

php<?php
  $str = 'aa aba abba abbba abca abea';
?>

Напишете регулярен израз, който ще намери низовете по шаблон: буква 'a', буква 'b' един или повече пъти, буква 'a'.

Задание 2

Даден е низ:

php<?php
  $str = 'aa aba abba abbba abca abea';
?>

Напишете регулярен израз, който ще намери низовете по шаблон: буква 'a', буква 'b' нула или повече пъти, буква 'a'.

Задание 3

Даден е низ:

php<?php
  $str = 'aa aba abba abbba abca abea';
?>

Напишете регулярен израз, който ще намери низовете по шаблон: буква 'a', буква 'b' един път или нито веднъж, буква 'a'.

Задание 4

Даден е низ:

php<?php
  $str = 'aa aba abba abbba abca abea';
?>

Напишете регулярен израз, който ще намери низовете 'aa', 'aba', 'abba', 'abbba', без да улови 'abca' и 'abea'.