Expressões Regulares (RegEx)

Ricardo Reis
8 min readApr 16, 2020

--

Site para testar expressões regulares online

http://regexpal.com/

Metacaracteres

Os metacaracteres são caracteres que possuem significado especial. Um metacaractere transforma um caractere literal (letra, número ou símbolo) em uma expressão diferenciada de busca.

Metacaracteres mais comuns

\ . * + - { } [ ] ^ & | ? ( ) : ! =

Os matecaracteres podem ter mais de um significado, dependendo do contexto de uso.

Obs: As aspas NÃO são metacaracteres.

Caractere único (ponto)

.

O ponto indica um caractere qualquer, como se fosse um ‘coringa’, ou como o * dos comandos de listagem de diretórios e arquivos.

Observe a diferença dos resultados com e sem o ponto (.)

Caracteres de escape

\

É um metacaractere (a barra \ )que indica a alteração do significado de um outro metacaractere. Transformando o metacaractere em um literal comum.

Usando apenas o ponto (.) cada caractere é filtrado (o texto inteiro), confira a imagem da esquerda abaixo.

Para filtrar apenas os pontos finais é necessário usar o caractere de escape (\), confira a imagem da direita abaixo.

No exemplo abaixo para filtrar apenas o “2.0”
é necessário usar a expressão “2\.”

Conjunto ou Classes de caracteres (colchetes)

[ ]

São listas de caracteres escritas dentro de colchetes [] e que servem para corresponder apenas um dos caracteres listados.

Permite selecionar um dos caracteres dentro dos colchetes, não importa a ordem.

[AFo] = Localizar todas as letras “A”, “F” e “o” (letras maiúsculas e minúsculas são consideradas diferentes)

Hífen

-

O hífen (-) determina um intervalo (uma faixa).

[A-Z] = Localizar todas as letras de “A” até “Z” (todas as letras maiúsculas.
[A-Za-z] = Localizar todas as letras de “A” até “Z” maiúsculas e de "a até "z" minusculas. Observe que letras acentuadas e pontos não foram selecionados.
[0–5] = De "0" até "5"

Expressões POSIX (comando Linux)

No LINUUX[[:alpha:]] = Qualquer caractere alfabético 
[[:upper:]] = Todas as letras maiúsculas A-Z
[[:lower:]] = Todas as letras minúsculas a-z
[[:digit:]] = Todos os números 0-9
[[:alnum:]] = Todos os números e letras maiúsculas ou minúsculas
[[:space:]] = Todos os espaços
m[ae]u = Localizar o que comece com "m", a segunda letra pode ser "a" ou "e" (conjunto de opções) e que termine com "u".

Negar classe de caracteres “^”

^ = inverte o significado dentro dos colchetes

O acento circunflexo “^” é um metacaractere que significa negação do que está dentro dos colchetes. Mas fora dos colchetes ele tem outro significado, ele é uma âncora (identifica o início de uma linha).

m[^ae]u = Localize o que começa com a letra "m”, seguido de uma letra que não seja “a”, nem letra “e” e que termine com “u”.
[aeiou] = Localizar todas as vogais.
[^aeiou] = Localizar tudo o que não é vogal.

Âncoras

^ = Localiza algo que está no início de linha
$ = Localiza algo que está no final de linha

Os metacaracteres âncoras são usados para representar caracteres no início ou no final de uma linha.

^[dé] = Localizar os caracteres “d” e “é” mas só quando eles aparecem no início de uma linha.

Repetição de caracteres

*  = Item precedente 0 ou mais vezes (existindo ou não)
\+ = Item precedente 1 ou mais vezes (existir pelo menos uma vez)
\? = Item precedente 0 ou 1 vez (não existe ou existe apenas 1 vez)

Exemplo: lista_de_frutas.txt

laranja
laranjas
laranjass

Localizar exatamente, sem repetição de caracteres

Comando para localizar exatamente as strings “laranja” no arquivo “lista_de_frutas.txt”

grep laranja lista_de_frutas.txt

Repetição de caracteres com asterisco *

*  = Item precedente 0 ou mais vezes (existindo ou não)

Comando para listar todas as ocorrências de “laranja”, que possam ter uma ou mais letras “s” no final, mas que também possa não ter letra “s” no final.

Ou seja, o comando diz o seguinte: “Procure a string laranja que tenha uma letra s no final. Mas olha só, pode ter apenas uma letra s no final porém também podem ter vários s no final. Ahh outra coisa, também quero que mostre as strings laranja que podem não ter s no final.”

grep laranjas* lista_de_frutas.txt

O asterisco afeta a letra anterior a ele, nesse caso a letra s.

Repetição de caracteres com \+

\+ = Item precedente 1 ou mais vezes (existir pelo menos uma vez)

Comando para listar a string laranja que tenha a letra s uma ou mais vezes no final.

grep ‘laranjas\+’ lista_de_frutas.txt

Repetição de caractere com \?

\? = Item precedente 0 ou 1 vez (não existe ou existe apenas 1 vez)

Comando para listar a string laranja com um s ou nenhum s no final.

grep ‘laranjas\?’ lista_de_frutas.txt

Revisando

Resultados com asterisco (*), barra mais (\+) e barra interrogação (\?)

Metacaractere \w

\w  = Localiza qualquer caractere alfanumérico.
\w+ = Localiza palavras (com ou sem números).

O “\w” (word) significa um caractere alfanumérico qualquer. Diferente do metacaracrete ponto “.” que significa qualquer coisa, incluindo espaços e símbolos.

Repetição quantificada

{ }

As chaves “{ }” são utilizadas para repetição quantificada.

{x}   = Item anterior corresponde exatamente x vezes
{x,} = Item anterior corresponde ao menos x vezes
{x,y} = Item anterior corresponde entre x e y vezes

Um número dentro de chaves “{2}” quer dizer que o item anterior corresponde exatamente 2 vezes.

r{2} = Exemplo para localizar a ocorência de duas letras “r” se guindas dentro de um texto.

Para localizar todas as palavras com duas letras “r” podemos usar o seguinte código:

\w+r{2}\w+[í]*\w+ 

Obs: Esse código funciona apenas com esse texto de exemplo, pois ele não prevê todos os tipos de palavras acentuadas possíveis.

Para localizar o telefone no texto de exemplo abaixo, podemos usar:

[0–9]{4}-[0–9]{4}
\d = Localiza números
\s = localiza espaços em branco.

Agrupamento de Caracteres

( )

Usando parênteses “( )” podemos fazer o agrupamento de caracteres, ou seja, permitem agrupar partes de uma expressão.

É possível aplicar operações de repetição a um grupo.

Não é possível usar dentro de conjuntos de caracteres, pois tem significado literal lá dentro (significam simplesmente parenteses).

Exemplo:

O objetivo é localizar no texto somente as palavras “dependentes” e “independentes”.

(in)?dependentes = Localizar palavras que terminem com dependentes, que tenham o "in" na frente. Sendo o "in" exatamente nesse formato,na sequencia em que aparecem, primeiro o "i" e depois o "n", não apenas um ou outro.

Alternação

|

A alternação é representada pelo metacaracter pipe “|”, que permite corresponder uma ou outra expressão.

Serve para escolher entre um ou outro item.

Exemplo:

casad(o|a)

--

--