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
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa+x#', '!', $str);
?>
Výsledkem bude v proměnné následující:
'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
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa*x#', '!', $str);
?>
Výsledkem bude v proměnné následující:
'! ! ! ! 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
$str = 'xx xax xaax xbx';
$res = preg_replace('#xa?x#', '!', $str);
?>
Výsledkem bude v proměnné následující:
'! ! xaax xbx'
Praktické úlohy
Je dán řetězec:
<?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'.
Je dán řetězec:
<?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'.
Je dán řetězec:
<?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'.
Je dán řetězec:
<?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'.