O comando 'ou' em expressões regulares PHP
Nesta lição, vamos analisar o comando
|, que representa uma variante mais
poderosa de OU em comparação com o
comando []. Este comando permite
dividir a expressão regular em várias partes.
Assim, a correspondência pode se encaixar em uma
parte da regex ou em outra. Vamos ver exemplos.
Exemplo
Neste exemplo, o padrão de busca é: três
letras 'a' ou três letras 'b':
<?php
$str = 'aaa bbb abb';
$res = preg_replace('#a{3}|b{3}#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! abb'
Exemplo
Neste exemplo, o padrão de busca é: três
letras 'a' ou 1 ou mais
letras 'b':
<?php
$str = 'aaa bbb bbbb bbbbb axx';
$res = preg_replace('#a{3}|b+#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! ! ! axx'
Exemplo
Neste exemplo, o padrão de busca é: uma ou mais letras ou três dígitos:
<?php
$str = 'a ab abc 1 12 123';
$res = preg_replace('#[a-z]+|\d{3}#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! ! 1 12 !'
Exemplo
A barra vertical pode dividir a expressão regular não em duas partes, mas em qualquer número de partes:
<?php
$str = 'aaa bbb ccc ddd';
$res = preg_replace('#a+|b+|c+#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! ! ddd'
Exemplo
Se a barra vertical estiver dentro de parênteses,
então o 'ou' funciona apenas dentro
desses parênteses. Por exemplo, vamos encontrar strings
seguindo o padrão: no início há
'a', ou 'b' uma ou mais vezes,
seguido por duas letras 'x':
<?php
$str = 'axx bxx bbxx exx';
$res = preg_replace('#(a|b+)xx#', '!', $str);
?>
Como resultado, será armazenado na variável o seguinte:
'! ! ! exx'
Problemas práticos
Dada a string:
<?php
$str = 'aeeea aeea aea axa axxa axxxa';
?>
Escreva uma expressão regular que encontre as strings
seguindo o padrão: nas extremidades há letras 'a',
e entre elas - ou a letra 'e' qualquer
número de vezes ou a letra 'x' qualquer
número de vezes.
Dada a string:
<?php
$str = 'aeeea aeea aea axa axxa axxxa';
?>
Escreva uma expressão regular que encontre as strings
seguindo o padrão: nas extremidades há letras 'a',
e entre elas - ou a letra 'e' duas vezes
ou a letra 'x' qualquer número de vezes.