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
, osed
e oawk
. - 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
- PIX: pix@blauaraujo.com
- Apoia.se
- Curso: Shell Script Descomplicado
- Meus livros
- Camisetas