Operadores de repetição de caracteres em expressões regulares
Há situações em que queremos indicar
que um caractere se repete um determinado número
de vezes. Se sabemos o número exato de repetições,
podemos simplesmente escrevê-lo várias vezes
- #aaaa#. Mas o que fazer se quisermos
dizer o seguinte: repetir uma ou mais
vezes?
Para isso, existem os operadores (quantificadores)
de repetição: o sinal de mais + (uma ou mais vezes),
o asterisco * (zero ou mais vezes) e
o ponto de interrogação ? (zero ou uma vez). Esses
operadores atuam sobre o caractere que
está antes deles.
Vamos ver o funcionamento desses operadores com exemplos.
Exemplo
Vamos encontrar todas as substrings pelo padrão letra
'x', letra 'a' uma ou mais
vezes, letra 'x':
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa+x#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'xx ! ! ! xbx'
Exemplo
Vamos encontrar todas as substrings pelo padrão letra
'x', letra 'a' zero ou mais
vezes, letra 'x':
<?php
$str = 'xx xax xaax xaaax xbx';
$res = preg_replace('#xa*x#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! ! ! xbx'
Exemplo
Vamos encontrar todas as substrings pelo padrão letra
'x', letra 'a' zero ou uma
vez, letra 'x':
<?php
$str = 'xx xax xaax xbx';
$res = preg_replace('#xa?x#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! xaax xbx'
Problemas práticos
Dada a string:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Escreva uma expressão regular que encontre as strings
segundo o padrão: letra 'a', letra 'b'
uma ou mais vezes, letra 'a'.
Dada a string:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Escreva uma expressão regular que encontre as strings
segundo o padrão: letra 'a', letra 'b'
zero ou mais vezes, letra 'a'.
Dada a string:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Escreva uma expressão regular que encontre as strings
segundo o padrão: letra 'a', letra 'b'
uma vez ou nenhuma, letra 'a'.
Dada a string:
<?php
$str = 'aa aba abba abbba abca abea';
?>
Escreva uma expressão regular que encontre as strings
'aa', 'aba', 'abba',
'abbba', sem capturar 'abca'
e 'abea'.