Grupos de caracteres em expressões regulares PHP
Existem comandos especiais que permitem
selecionar grupos inteiros de caracteres de uma vez. O comando
\d significa um dígito de 0 a 9.
O comando \w denota um dígito, uma letra latina
ou o sublinhado. O comando \s
denota um espaço ou caractere de espaço em branco:
espaço, quebra de linha, tabulação. É possível
inverter o significado do comando, escrevendo com letra
maiúscula: por exemplo, se \d é um dígito,
então \D é um não dígito.
Exemplo
Vamos encontrar todos os dígitos:
<?php
$str = '1 12 123';
$res = preg_replace('#\d#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'! !! !!!'
Exemplo
Os operadores de repetição consideram os comandos de grupo
como um todo, ou seja, parênteses de agrupamento
não são necessários. No exemplo a seguir, o padrão de busca
é assim: dígito de 0 a 9
uma ou mais vezes:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\d+#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'! ! ! abc @@@'
Exemplo
No exemplo a seguir, o padrão de busca é
assim: qualquer coisa uma ou mais vezes,
mas não um dígito de 0 a 9:
<?php
$str = '123abc3@@';
$res = preg_replace('#\D+#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'123!3!'
Exemplo
Neste exemplo, o padrão de busca é assim: caractere de espaço em branco uma vez:
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\s#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'1!12!123!abc!@@@'
Exemplo
Neste exemplo, o padrão de busca é assim:
caractere NÃO de espaço em branco uma ou mais vezes.
Todas as substrings separadas por espaços serão substituídas
por '!':
<?php
$str = '1 12 123 abc @@@';
$res = preg_replace('#\S+#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'! ! ! ! !'
Exemplo
Neste exemplo, o padrão de busca é assim:
dígito ou letra uma ou mais vezes.
Todas as substrings consistindo de dígitos e letras
serão substituídas por '!':
<?php
$str = '1 12 123a Abc @@@';
$res = preg_replace('#\w+#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'! ! ! ! @@@'
Exemplo
Neste exemplo, o padrão de busca é assim:
NÃO dígito e NÃO letra uma ou mais vezes.
Esta definição em nosso caso inclui
'@@@' e todos os espaços (afinal, eles também
não são dígitos nem letras). Observe
que no final há um '!' - nele
foi transformada a string ' @@@' - com
um espaço na frente:
$str = '1 12 123 Abc @@@';
$res = preg_replace('#\W+#', '!', $str);
Como resultado, o seguinte será armazenado na variável:
'1!12!123!Abc!'
Tarefas práticas
Dada a string:
<?php
$str = 'a1a a2a a3a a4a a5a aba aca';
?>
Escreva uma expressão regular que encontre as strings
em que nas extremidades há letras 'a',
e entre elas um único dígito.
Dada a string:
<?php
$str = 'a1a a22a a333a a4444a a55555a aba aca';
?>
Escreva uma expressão regular que encontre as strings
em que nas extremidades há letras 'a',
e entre elas qualquer quantidade de dígitos.
Dada a string:
<?php
$str = 'aa a1a a22a a333a a4444a a55555a aba aca';
?>
Escreva uma expressão regular que encontre as strings
em que nas extremidades há letras 'a',
e entre elas qualquer quantidade de dígitos (inclusive
zero dígitos, ou seja, a string 'aa').
Dada a string:
<?php
$str = 'avb a1b a2b a3b a4b a5b abb acb';
?>
Escreva uma expressão regular que encontre strings
do seguinte tipo: nas extremidades há letras
'a' e 'b', e entre elas - não
um número.
Dada a string:
<?php
$str = 'ave a#b a2b a$b a4b a5b a-b acb';
?>
Escreva uma expressão regular que encontre strings
do seguinte tipo: nas extremidades há letras
'a' e 'b', e entre elas - não
é letra e não é dígito.
Dada a string:
<?php
$str = 'ave a#a a2a a$a a4a a5a a-a aca';
?>
Escreva uma expressão regular que substitua todos os espaços
por '!'.