Operátory opakování znaků v regulárních výrazech

Existují situace, kdy chceme určit, že se znak opakuje daný početrát. Pokud známe přesný počet opakování, můžeme jej jednoduše napsat několikrát - #aaaa#. Ale co dělat, když chceme říci toto: opakovat jednou nebo více krát?

K tomu slouží operátory (kvantifikátory) opakování: plus + (jednou nebo více krát), hvězdička * (nula nebo více krát) a otazník ? (nula nebo jednou). Tyto operátory působí na znak, který stojí před nimi.

Podívejme se na práci těchto operátorů na příkladech.

Příklad

Najděte všechny podřetězce podle vzoru písmeno 'x', písmeno 'a' jednou nebo více krát, písmeno 'x':

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

Výsledkem bude v proměnné následující:

php'xx ! ! ! xbx'

Příklad

Najděte všechny podřetězce podle vzoru písmeno 'x', písmeno 'a' nula nebo více krát, písmeno 'x':

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

Výsledkem bude v proměnné následující:

php'! ! ! ! xbx'

Příklad

Najděte všechny podřetězce podle vzoru písmeno 'x', písmeno 'a' nula nebo jednou, písmeno 'x':

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

Výsledkem bude v proměnné následující:

php'! ! xaax xbx'

Praktické úlohy

Задание 1

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce podle vzoru: písmeno 'a', písmeno 'b' jednou nebo více krát, písmeno 'a'.

Задание 2

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce podle vzoru: písmeno 'a', písmeno 'b' nula nebo více krát, písmeno 'a'.

Задание 3

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce podle vzoru: písmeno 'a', písmeno 'b' jednou nebo žádnou, písmeno 'a'.

Задание 4

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce 'aa', 'aba', 'abba', 'abbba', a nezachytí 'abca' a 'abea'.