Sie sind auf Seite 1von 12

Expresses Regulares

Definio (Aurlio Marinho Jargas)


Formal

um mtodo formal de especificar um padro de texto 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

Informais

Recurso poderoso utilizado por muitos aplicativos do GNU/Linux


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

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

Expresses Regulares
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

Um pouco de histria

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
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
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

Expresses Regulares
Metacaracteres Metacaracteres tipo representante
Ponto: .

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

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: [...]
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 3

Expresses Regulares
Exemplos
n.o n[a]o [pgr]ato 12[:. ]45 <[BIP]> 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
O ponto dentro da lista NO um metacaracter e sim um caracter normal

Listas com intervalos




Como representar uma ER para casar com qualquer letra minscula?


[abcdefghijklmnop...z] ??? MUITO LONGA! = [0-9] = [a-z] = [A-Z] = [012345789] = [defABC567]
4

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


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

Mais de um intervalo pode ser utilizado em uma lista


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

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

Expresses Regulares
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      

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

Expresses Regulares
Representaes POSIX variam conforma a configurao do sistema Nos EUA, [[:upper:]] igual a [A-Z] No Brasil, [[:upper:]] inclui os caracteres acentuados ,,,...
   # $ % " !

Listas negadas
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

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!

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

Expresses Regulares
Asterisco: *
' &

Indica nenhuma ou muitas ocorrncias do padro anterior to*c tc, toc, tooc, toooc, toooooc, ... t[oc]* t, to, tc, toc, tooc, tocc, toccooocc, ... Sempre tentado casar o maior nmero de vezes
) (

O que casar [ar]*a na palavra arara ? (Expresses Regulares, Aurlio) 1.a 2.ara 3.arara 4.n.d.a [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

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,}
5 3 4 2

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

Expresses Regulares
Metacaracteres tipo ncora
Circunflexo: ^
8 @ 7 6

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 @

Combinaes teis
^$ ...$ ^.{15,30}$ linha em branco ltimos trs caracteres da linha linhas que contenham entre 15 e 30 caracteres
9

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

Expresses Regulares
Borda: \b
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
C B

Por palavra, deve-se entender seqncias de letras, nmeros e o caracter _ Deve ser utilizado antes de qualquer metacaracter para torn-lo um caracter normal sem qualquer efeito especial para a expresso regular

Literal: \
F

Ou alternativo: |
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://
I H

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

10

Expresses Regulares
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, ...
Q P

(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

Expresses Regulares
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
S V R

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