Você está na página 1de 12

Expresses Regulares

Formal

um mtodo formal de especificar um padro de texto

Informais

Definio (Aurlio Marinho Jargas)

Uma maneira de procurar um texto que voc no lembra exatamente


como , mas tem uma idia das variaes possveis
Uma maneira de procurar um trecho em posies especficas como no
comeo ou no fim de uma linha, ou palavra
Uma maneira de um programador especificar padres complexos que
podem ser procurados e casados em uma cadeia de caracteres
Uma construo que utiliza pequenas ferramentas, feita para obter
determinada seqncia de caracteres de um texto

Exemplos


Recurso poderoso utilizado por muitos aplicativos do GNU/Linux


grep, egrep, find, sed, awk, perl, python, ed, vi e emacs

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Poucos usurios dominam satisfatoriamente os recursos providos


pelas expresses regulares
Documentao existente no clara e completa
Programming Perl (Larry Wall, O'Reilly) possui um excelente captulo
sobre o uso e aplicao de expresses regulares

1943: as ER's surgiram a partir do estudo de dois neurologistas sobre


o funcionamento dos neurnios humanos
Alguns anos depois um matemtico definiu um modelo para
representar este estudo


Um pouco de histria

Foram definidos grupos regulares (regular sets) que deream origem as


expresses regulares

Primeira implementao em computador deu-se em 1968 no editor


qed que depois tornou-se ou ed


Expresses Regulares

Comandos g e p do ed ( g/RE/p/) deram origem ao grep

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Metacaracteres
Correspondem as ferramentas bsicas de uma expresso regular
So combinados para representar o padro de busca desejado
Ponto: .

Metacaracteres tipo representante

Curinga que casa com uma nica letra, nmero, caracter especial
(@,#,$,%,...) , TAB, o prprio ponto, ...
Exemplos
.ato
n.o
.im
13.30
c.mprido

pato, rato, gato, ...


no, nao, no, ...
fim, Fim, ...
13:30, 13.30, 13 30, 13-30, ...
comprido, cumprido, ...

Lista: [...]

Expresses Regulares

Mais especfica que o ponto, a lista determina quais caracteres ou


smbolos podem ser casados
S pode ser casado um caracter por vez dentro de cada lista
Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Expresses Regulares
Exemplos

O ponto dentro da lista NO um metacaracter e sim um caracter normal

Como representar uma ER para casar com qualquer letra minscula?

Listas com intervalos

[abcdefghijklmnop...z] ??? MUITO LONGA!

Para facilitar a representao de seqncias, pode-se usar intervalos


[0123456789]
[abcdefghijklmnop...z]
[ABCDEFGHIJKLMNOP...Z]

no, nao, no, n9o, nxo, n@o,...


no, nao (Obs: no casa com nao)
pato, gato, rato
12:45, 12.45, 12 45
<B>, <I>, <P>

Observao

n.o
n[a]o
[pgr]ato
12[:. ]45
<[BIP]>

= [0-9]
= [a-z]
= [A-Z]

Mais de um intervalo pode ser utilizado em uma lista


[0-57-9]
[d-fA-C5-7]

= [012345789]
= [defABC567]

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Observaes
Como representar o - dentro de uma lista se ele especial?
Deve-se sempre coloc-lo no final da lista
[a-f-]
= [abcdef-]
[0-9-]
= [0123456789-]
Como representar o ] dentro de uma lista se ele especial?
Deve-se sempre coloc-lo no incio da lista
[]]
casa somente com o ]
[]6-9]
casa com ],6,7,8,9
[]-]
casa com ] ou -

Expresses Regulares

Intervalos respeitam a ordem da tabela ASCII


casa com :, ;, <, =, >, ?, e @

Classes de caracteres POSIX (padro internacional)


Incluem letras acentuadas
[:upper:]
letras maisculas
[:lower:]
letras minsculas
[:alpha:]
letras maisculas e minsculas
...


[:-@]

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Representaes POSIX variam conforma a configurao do sistema


Nos EUA, [[:upper:]] igual a [A-Z]
No Brasil, [[:upper:]] inclui os caracteres acentuados ,,,...

Expresses Regulares

Listas negadas

Metacaracteres tipo quantificador


Opcional: ?

Indica nenhuma ou uma ocorrncia do padro anterior


[pgr]atos?
pato, gato, rato, patos, gatos, ratos
casa[r!]?
casa, casar, casa!


Funcionam com a lgica inversa da lista normal


Tudo que encontra-se na lista no ser casado
[^0-9]
casa com qualquer smbolo que NO seja nmero
[:;,.!?][^ ]
casa com qualquer pontunao que no esteja
seguida por um espao em branco

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Expresses Regulares
Asterisco: *

Sempre tentado casar o maior nmero de vezes




Indica nenhuma ou muitas ocorrncias do padro anterior


to*c
tc, toc, tooc, toooc, toooooc, ...
t[oc]*
t, to, tc, toc, tooc, tocc, toccooocc, ...
O que casar [ar]*a na palavra arara ? (Expresses Regulares, Aurlio)
[ar] zero vezes, seguido de a
[ar] duas vezes, seguido de a
[ar] quatro vezes, seguido de a

Mais: +
Indica uma ou mais ocorrncias do padro anterior
to+c
toc, tooc, toooc, toooooc, ...
t[oc]+
to, tc, toc, tooc, tocc, toccooocc, ...


1.a
2.ara
3.arara
4.n.d.a

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Expresses Regulares

"

Chaves: {...}
Permite que seja especificada um limite mnimo e/ou mximo de
repeties para o padro anterior
Possibilidades
{n,m}
{n,}
{n}
{0,}
{1,}

de n at m
pelo menos n
exatamente n
o mesmo que o *
o mesmo que o +

Exemplos
to{1,3}c toc, tooc, toooc
to{2,}c
tooc, toooc, tooooc, ...
t[oc]{2,} tooc, toooc, tooooc, tco, toc, tcooocoo...

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Metacaracteres tipo ncora


Circunflexo: ^

'

&

Indica que o padro a seguir deve ser considerado a partir do incio da linha
^[a-z]
linhas que comeam com letras minsculas
^[0-9]
linhas que comeam por nmeros
^[^0-9]
linhas que NO comeam por nmeros

Cifro: $
(

Indica que o padro anterior deve ser considerado no fim da linha


toc$
linhas que terminam com a palavra toc
[0-9]$
linhas que terminam com nmero
[:-@]$
linhas que terminam com os caracteres :, ;, <, =, >, ?, e @

Expresses Regulares

Combinaes teis
^$
...$
^.{15,30}$

linha em branco
ltimos trs caracteres da linha
linhas que contenham entre 15 e 30 caracteres

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

Expresses Regulares
Borda: \b

Deve ser utilizado antes de qualquer metacaracter para torn-lo um caracter


normal sem qualquer efeito especial para a expresso regular

Ou alternativo: |
0

A lista funciona como um tipo de operador OU somente para uma letra


Indica um padro com vrias alternativas
Hello | Ola
casa ou com a palavra Hello ou com Ola
http://|https://
casa com http:// ou https://
1

Por palavra, deve-se entender seqncias de letras, nmeros e o caracter _

Literal: \
.

Indica a borda de uma palavra (incio ou fim)


ana
ana, anamaria, analucia, mariana, luciana
\bana
ana, anamaria, analucia
ana\b
ana, mariana, luciana
\bana\b
ana

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

10

Grupo: (...)
Possibilita o agrupamento de caracteres que sero tratados atomicamente
(oi!)+
oi!, oi!oi!, oi!oi!oi!, ...
(\.[0-9]){3}
.3.4.5, .7.2.4, ...
3

Expresses Regulares

(www\.)?comunidadesol.org
(super|hiper)mercado
(su|hi)permercado
((su|hi)per)?mercado
(mini|(su|hi)per)?mercado

www.comunidadesol.org, comunidadesol.org
supermercardo, hipermercado
supermercardo, hipermercado
supermercardo, hipermercado, mercado
supermercardo, hipermercado, mercado,minimercado

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

11

e?grep [opes] PADRO [FILE ...]: retorna linhas dos


arquivos especificados que casem com o padro de busca repassado
Comando muito popular no mundo GNU/Linux
O egrep tem a capacidade de processar expresses regulares extendidas
Opes
-i: torna a busca case-insensitive
-x: retorna somente se o texto casar exatamente com o padro
-r: busca recursiva a partir do diretrio indicado como parmetro
-f: carrega modelos a partir do arquivo indicado, um por linha
8

Expresses Regulares

Exemplos
$
$
$
$
$

grep ana agenda.txt


grep -x ana agenda.txt
egrep '^ana$' agenda.txt
egrep 't[oc]*' agenda.txt
egrep '(mari|luci)?ana$' agenda.txt

Introduo ao Sistema GNU/Linux - Copyleft (2004) Prof. M.Sc. Jansen Sena

12

Você também pode gostar