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.