Um guia rápido sobre expressão regular
Uma "expressão regular" (do inglês "regular expression", abreviação RegEx), serve para: extrair um pedaço de texto, substituir um texto, indentificar padrões em strings, validar entradas de dados em formulários, localizar informações de textos, modificar formato de texto, remover caracteres inválidos.
Obs.: a sintaxe da RegEx é case-sensitive, ou seja, reconhece texto em minusculo e em maiusculo, "abc" é diferente de "ABC".
Um exemplo de uso, vamos verificar se um dado fornecido é um número decimal entre "0,00" a "9,99", para identificar use a expressão regular "\d,\d\d" - onde o símbolo "\d" é um curinga que reconhece números - essa expressão combina com "1,23" mas não combina com "123" pois falta a vírgula, nem combina com 1,2c pois "\d" não reconhece letra.
Apresentaremos os métodos mais utilizados da classe Regex, seguida de práticas e validações úteis do dia-a-dia.
METACARACTERE:
Um metacaractere é um símbolo com função especial nas expressões regulares. são categorizados conforme seu uso:
a) ÂNCORAS:
Estabelece uma posição onde a expressão regular irá pesquisar um caracter. Posições: antes, depois ou entre os caracteres.
metacarac | apelido | significado |
---|---|---|
^ | início de texto | pesquisa se existe no início do texto, ou no início de uma linha com a flag |
\A | início da string | pesquisa somente no início do texto |
$ | fim de texto | pesquisa no fim do texto, ou de uma linha com a flag ; não reconhece a quebra de linha \n no fim |
\Z | fim da string | pesquisa somente no fim do texto |
\b | fronteira do caractere | pesquisa na posição de borda, bem no início de uma palavra, ou logo depois do seu término; o mesmo que a posição entre \W e \w ou vice-versa |
\B | não fronteira do caractere |
B) ESPECIFICADORES:
Especificam o conjunto de caracteres a pesquisar em uma posição.
metacarac | apelido | significado |
---|---|---|
. | curinga | usando o ponto "." pode localizar qualquer tipo de caractere, não reconhece a quebra de linha \n |
[...] | conjunto | indica um conjunto de caracteres que serão pesquisados "[ ]", que podem conter no texto |
[^...] | conjunto negado | adicionando o "^" no conjunto, este indica o conjunto de caracteres que NÃO podem conter na pesquisa. |
\d | dígito | pesquisa qualquer número; tem o mesmo resultado que usar o conjunto [0-9] |
\D | não-digíto | pesquisa número que não podem existir no texto; tem o mesmo resultado que usar o conjunto [^0-9] |
\s | branco | pesquisa espaço, quebra de linha, tabs etc.; em o mesmo resultado que usar [\t\n\r\f\v] |
\S | não-branco | pesquisa onde não for espaço ou quebra de linha; tem o mesmo resultado que usar [^\t\n\r\f\v] |
\w | alfanumérico | pesquisa qualquer letras e números; tem o mesmo resultado que usar [a-zA-Z0-9_] |
\W | não-alfa | pesquisa o que não for letra ou número; pode ser um complemento de \w |
\ | escape | a barra "\" anula a função de um metacaractere em seguida; por exemplo: se deseja pesquisar um ponto "." use "\." assim representa apenas um ponto, e não a função de curinga |
\n | nova linha | pesquisa a quantidade de quebras de linha ou um texto no início de um parágrafo; \u000A |
\t | tabulação | pesquisa a quantidade de avanços de parágrafo; \u0009 |
C) QUANTIFICADORES:
Define o número de repetições que uma expressão regular irá localizar:
metacarac | significado |
---|---|
{n} | apresentará exatamente "n" ocorrências, por exemplo: se deseja pesquisar por 3 aparições no texto use {3} |
{n,m} | pesquisa no mínimo "n" ocorrências e no máximo "m" |
{n,} | pesquisa no mínimo "n" ocorrências, sem limite máximo |
{,n} | pesquisa no máximo "n" ocorrências |
? | 0 ou 1 ocorrência; pesquisa se não existe e pesquisa no máximo 1 ocorrência; tem o mesmo resultado que usar {,1} |
+ | 1 ou mais ocorrência; pesquisa apenas se existe no texto; tem o mesmo resultado que usar {1,} |
* | 0 ou mais ocorrência, qualquer quantidade |
| | o caractere pipe "|" usado com parênteses representa pesquisar uma ocorrência ou outra; "(z|f)ood" irá pesquisa por "zood" ou "food" |
«q»?
modera qualquer um dos quantificadores acima (ver Gula × moderação)
POSIX: Para incluir acentos (letras acentuadas) devemos recorrer as classes POSIX, elas levam em conta a localidade do sistema.
metacarac | significado |
---|---|
[:upper:] | letras maiúsculas, resultado igual ao `[A-Z]` |
[:lower:] | letras minúsculas, resultado igual ao `[a-z]` |
[:alpha:] | maiúsculas e minúsculas, igual ao `[A-Za-z]` |
[:alnum:] | alfa numéricos, igual ao `[A-Za-z0-9]` |
[:digit:] | Números, resultado igual ao `[0-9]` |
EXEMPLOS:
Veja alguns exemplos com explicações:
- Para pesquisar um CEP use \d{5}-\d{3}
- O padrão de um CEP como 05432-001, possui 5 dígitos, um hífen e mais 3 dígitos. O código "\d" é um metacaractere curinga que pesquisa um dígito entre 0 e 9. O código "{5}" é um quantificador que indica que o padrão escrito anterior deve ser repetido 5 vezes, portanto "\d{5}" é o mesmo que "\d\d\d\d\d" onde deve ter 5 números. Para pesquisar a hora use [012]\d:[0-5]\d
- Semelhante ao formato padrão de horas e minutos, como 03:10 ou 23:59. O código "[012]" define um conjunto, que indica o primeiro caractere deve ser 0, 1 ou 2. No segundo "[]" o hífen indica um conjunto de caracteres, onde "[0-5]" é uma forma abreviada para o conjunto (sequencia) "[012345]"; o metacaractere que representa todos os números "\d" ([0-9]) Para pesquisar a placa de automóvel use [A-Z]{3}-\d{4}
- É o padrão de uma placa de automóvel no Brasil: com três letras de A a Z seguidas de um hífen, seguido de quatro dígitos, como CKD-4592.