Expressões Regulares

Guia de referência rápida

Conteúdo

Dicas importantes

O que são expressões regulares?
Expressões regulares (regex, regexp ou expreg) são um método para descrever padrões de texto.
As expressões regulares não processam casamentos
Quem, de fato, processa os casamentos são os programas e utilitários criados com esta funcionalidade, como o grep, o sed e o awk.
O Bash também faz casamentos com expressões regulares?
Sim, além dos curingas, o Bash trabalha com expressões regulares no comando composto [[ com o operador =~.
Como dominar as expressões regulares?
O segredo para desenvolver a habilidade de trabalhar com expressões regulares é praticar muito, mas isso deve ser feito do jeito certo: ou seja, descrevendo claramente o padrão buscado sem se preocupar, num primeiro momento, em como representá-lo com uma regex.

Metacaracteres das expressões regulares

Os metacaracteres são símbolos que representam, de várias formas, os caracteres de um padrão, suas quantidades, posições no texto, e como eles se relacionam com outros caracteres.

A forma mais básica de representar caracteres é escrevendo, explicitamente, os caracteres que fazem parte do padrão buscado. Então, por exemplo, se o padrão que me interessa é o que contém a palavra banana, eu posso simplesmente descrever esta sequência de caracteres no argumento do programa que estiver sendo utilizado para realizar a busca pelo padrão:

:~$ grep 'banana' /usr/share/dict/brazilian
banana
bananada
bananadas
bananais
bananal
bananas

Às vezes, porém, o padrão buscado não requer caracteres específicos, mas qualquer caractere que se apresente em uma certa posição no texto: é aí que entram os metacaracteres.

Implementações

Existem muitas implementações diferentes de expressões regulares, mas todas elas têm em comum os símbolos e os significados das especificações dos metacaracteres POSIX, que veremos a seguir.

Script utilizado na aula (igrep.sh)

#!/bin/bash

list_lines() {
    grep --color=always -E "$1" $2 | nl
}

while :; do
    read -er -p 'Regex: ' regex
    [[ ${regex,} == q ]] && break
    history -s -- "$regex"
    echo '---------------------------------------'
    list_lines "$regex" "$1"
    echo '---------------------------------------'
done

Representam caracteres

Representantes

Meta Descrição
. Um caractere qualquer, inclusive o ponto.
[...] Qualquer um dos caracteres listados.
[^...] Qualquer caractere, menos os listados.
\META Torna literal um caractere que possua significado.

Dependendo do modo da expressão regular, a contrabarra pode ter o efeito contrário, dotando certos caracteres de algum significado especial. Por exemplo, no modo básico (BRE), o caractere + precisa ser escrito com a contrabarra para ter o significado de um quantificador (\+).

Classes

Meta Descrição
\w Um caractere válido em palavras: [A-Za-z0-9_]
\W Qualquer caractere que não seja válido em palavras.
\s Um caractere em branco: [ \t\n\r\f\v]
\S Qualquer caractere que não seja um caractere em branco.

Classes nomeadas (POSIX)

Classe Descrição
[:upper:] Uma letra maiúscula.
[:lower:] Uma letra minúscula.
[:alpha:] Uma letra maiúscula ou minúscula.
[:alnum:] Uma letra maiúscula, minúscula ou um dígito.
[:word:] Um caractere alfanumérico ou o sublinhado (_).
[:digit:] Um dígito decimal (0 a 9).
[:xdigit:] Um dígito hexadecimal (0 a F).
[:blank:] Um caractere de espaço horizontal (espaço e tabulação).
[:space:] Um caractere de espaço horizontal ou vertical.
[:graph:] Um caractere visível qualquer.
[:print:] Um caractere visível qualquer ou o caractere espaço.
[:punct:] Um símbolo gráfico ou pontuação.

Representam quantidades (quantificadores)

Meta Descrição
? Zero ou uma ocorrência da entidade anterior (padrão ou caractere).
* Zero ou mais ocorrências da entidade anterior.
+ Uma ou mais ocorrências da entidade anterior.
{min,max} De min a max ocorrências da entidade anterior.

Posicionam ocorrências (âncoras)

Meta Descrição
^ Início da cadeia de caracteres (início da linha).
$ Fim da cadeia de caracteres (fim da linha).
\b Borda de uma palavra (início ou fim).
\B Fora da borda de uma palavra (início ou fim).

Agrupam e associam padrões

Meta Descrição
(PADRÃO) Agrupa, aninha e define a precedência de padrões.
\1\9 Referências a padrões agrupados segundo suas ordens de ocorrência.
| Define padrões alternativos.

Apoie o meu trabalho