Você está na página 1de 39

UNIVERSIDADEESTADUALDAPARABA

CENTRODECINCIASEXATASESOCIAISAPLICADASCAMPUSVII
CURSODELICENCIATURAEMCOMPUTAO
PRODUODEMATERIAISINSTRUCIONAIS

Docente:VtorAblioSobral
Discentes:LuizAugustodeMacedoMoraiseRivanilsondaSilvaRodrigues

Introduo a Expresses Regulares

2012

Sumrio
1Prrequisitos....................................................................................1
Introduo..................................................................................................2
BreveHistriadasExpressesRegulares....................................................2
Prrequisitos.............................................................................................2
Alfabeto..................................................................................................2
Cadeiadecaractere.................................................................................3
Tamanho.................................................................................................3
Subcadeia..............................................................................................3
Concatenao..........................................................................................4
Linguagem..............................................................................................4
ConceitosbsicossobreExpressesRegulares............................................4

2Conceitostericos.............................................................................7
Definioformaldeumaexpressoregular...............................................8
OperaescomExpressesRegulares.........................................................9
Unio......................................................................................................9
Concatenao..........................................................................................9
Estrela...................................................................................................11
Precednciadeoperadoresemexpressesregulares............................12
Algumasdefiniesimportantes...........................................................12
Exemplos...............................................................................................12

3Dateoriaparaaprtica..................................................................14
Caracteresespeciais..................................................................................15
Ponto(.)................................................................................................15
Comeodastring(^)...........................................................................15
Fimdastring($)...................................................................................15
Operadoresbsicos...................................................................................15
Unio(|)...............................................................................................15

Estrela(*).............................................................................................16
Umoumais(+)....................................................................................16
Zeroouum(?)......................................................................................16
Maisoperadores........................................................................................17
Repetiesfinitas..................................................................................17
Conjuntos..............................................................................................17
Grupos..................................................................................................17

4Praticandocomexpressesregulares..............................................18
CEP...........................................................................................................19
Email.......................................................................................................19
Primeiraverso.....................................................................................19
Segundaverso.....................................................................................20

5Ferramentas....................................................................................22
TestandoERsnaWeb................................................................................24
RegexPal(http://regexpal.com/)..........................................................24
RegExr(http://gskinner.com/RegExr/)................................................25
Aferramentaegrep...................................................................................25
Flags......................................................................................................26
ComeoefimdeERs............................................................................27

6ExpressesregularescomPython...................................................28
AlinguagemPython..................................................................................29
Aprendendoomdulore..........................................................................29
match....................................................................................................29
search....................................................................................................30
findall....................................................................................................31
sub........................................................................................................31

ConsideraesFinais............................................................................32
Referncias..........................................................................................33

Lista de ilustraes
Ilustrao1:SiteRegexPal.......................................................................................24
Ilustrao2:SiteRegExr..........................................................................................25

Lista de quadros
Quadro1:Cadeiasdecaracteres...............................................................................5
Quadro2:Concatenaodelinguagens..................................................................10
Quadro3:Concatenaodelinguagens2...............................................................11
Quadro4:Exemplosdeexpressesregulares..........................................................13
Quadro5:Principaisflagsutilizadasnaferramentaegrep......................................26

1 Pr-requisitos

este captulo apresentaremos alguns pr


requisitos e introduziremos os primeiros
conceitos sobre expresses regulares de forma
puramenteterica.

Expresses Regulares: Teoria e Prtica

Introduo
Em cincia da computao, uma expresso regular uma forma concisa e
flexvel de identificar cadeias de caracteres, caracteres particulares, palavras ou
padres de caracteres. So largamente utilizadas em linguagens de programao,
ferramentasdebuscadepadreseanalisadoreslxicos.Nestetrabalhoasexpresses
regularesseroapresentadasemumprimeiromomentodeformatericabaseadona
teoriadacomputaoeemumsegundomomentodeformaprtica.

Breve Histria das Expresses Regulares


Asexpressesregularesestoinseridasnateoriadosautmatosenateoriadas
linguagens formais, ambas fazem parte da teoria da computao. As origens das
expressesregularesremontamadcadade50,elasforamdefinidaspelomatemtico
StephenColeKleenenoanode1956noartigoRepresentationofeventsinnervenets
and finite automata, Seu trabalho foi a base para os primeiros algoritmos
computacionaisdebuscaeparaalgumasdasmaisantigasferramentasdetratamento
detextoemambientesUNIX.
AtualmenteasExpressesRegularessoaplicadasnabuscaesubstituiode
palavrasemeditoresdetexto,emlinguagensdeprogramao,validaodeformatos
detexto(ouprotocolos),filtragemdeinformaoeetc.

Pr-requisitos
Antesde conhecer conceitosbsicos sobreexpressesregulares,definiremos
algunsconceitosfundamentaisparaasuacompreenso.

Alfabeto
Um Alfabeto qualquer conjunto de smbolos finito no vazio. Geralmente
usamosaletragrega paradesignarumalfabetodesmbolos.Aseguirtemosalguns
exemplosdealfabetos:

1 ={0,1};
2

1Prrequisitos

2 ={a,b,c,d,e}
3 ={0,1,2,a,b}
Osmembrosdeumalfabetosodenominadossmbolosdoalfabeto.

Cadeia de caractere
Oconceitodecadeiadecaracterefundamentalmenteconstrudoemcinciada
computao. Uma cadeia de caracteres uma sequncia finita de smbolos. Uma
cadeia de caracteres sobre um alfabeto uma sequncia finita de smbolos que
pertencemaumalfabeto,ouseja,umaformaparticulardecadeiadecaractereonde
cadaelementodacadeiapertenceaumalfabeto. Tomando 1comoalfabetoento

01001umacadeiasobre 1.Agorase4={a,b,c,d,e,...,z},entoabracadabra

umacadeiasobre4.
Usualmenteescrevemoscadaelementodacadeiadecaracterejuntoumdooutro
esemvrgulas.

Tamanho
Se w forumacadeiaqualquersobreumalfabeto qualquer,otamanhodew,
serescritocomo|w|,otamanhoseronmerodesmbolosque w contm.Uma
cadeiadecaracteresdetamanhozerochamadadecadeiavaziaeserescritapor
definiocomo.
Exemplo:

={0,1};
w=001001
|w|=6

Sub-cadeia
Sejawumacadeiadecaracteresdizemosquezumasubcadeiadewsezfaz
partedew.Porexemplo,acadeiaabraumasubcadeiadeabracadabra.

Expresses Regulares: Teoria e Prtica

Concatenao
Podemosconcatenarduascadeiasdecaracteres,sejam x e y duascadeiasde
caracteres, escrevemos a concatenao de x e y como x1...xny1...ym, a cadeia que
obtemosaoconcatenarofimdacadeiaxaoiniciodacadeiayxyouxy.
A concatenao de uma cadeia de caractere com ela mesma usa a seguinte
notao:

Ondekonmerodevezesquexconcatenadocomeleprprio.
Exemplo:
Sejamxeyduascadeiasdecaracteresondex=olaey=mundo
xy=olamundo
yx=mundoola
x2=olaola

Linguagem
Umalinguagemumconjuntodecadeias.

Conceitos bsicos sobre Expresses Regulares


Emteoriadacomputaoexpressesregularessodescritoresdelinguagens,ou
seja,apartirdestasexpressespodemosidentificarumalinguagemregulareescrev
lausandoexpresses.
Na matemtica podemos usar os operadores de soma, e multiplicao para
construirexpressescomoaquesegue:
( 2 + 3 ) 5

1Prrequisitos
De maneira anloga, podemos usar operaes regulares para construir
expressesquedescrevemlinguagens,estassochamadasexpressesregulares.Um
exemplodeexpressoregular:
( 0 U 1 )0*

Oresultadodaexpressoaritmticaacimaonmero30.Oresultadodeuma
expressoregularumalinguagem.Nestecasooresultadodaexpressoregulara
3linguagemqueconsistedetodasascadeiasdecaracterespossveiscomeandocom0
ou1seguidoporumnmeroqualquerde0's(zeros)inclusivenenhum,ouseja,a
linguagemrepresentaoconjuntodetodasascadeiasdecaracteresquecomeamcom
0oucom1eterminamcomumnmeroqualquerdezeros.Assimaexpressoregular
acimadescrevedentreoutras,ascadeiasdecaracteresmostradasnoQuadro1:
Cadeiasde
caracteres

Iniciodacadeia

Nmerodezerosno
finaldacadeia

0(zero)

10

000

1000

00000

100000

1000000

00000000

Quadro1:Cadeiasdecaracteres
Paraexemplificarousodeexpressesregulares,tomeseguintelinguagem:o
conjunto de cadeias de 0s (zeros) e 1s (um's) tais que comece com qualquer
quantidade de 1s (inclusive nenhum), seguidos necessariamente deum 0 e outra
sequnciacomqualquerquantidadede1s.

Expresses Regulares: Teoria e Prtica


Essalinguagemaparentementecomplexapodeserescritafacilmenteemforma
deexpressoregular:
1*01*
Notequeapesarderepresentarumconjuntodecadeiasdecaracteres,ouseja,
umalinguagem,asexpressesregularestambmparecemcadeias.Assimas
expressesregularesestarosempredestacadasemnegrito.

2 Conceitos
tericos

este captulo apresentaremos a definio


formaldeumaexpressoregular,bemcomo
os operadores regulares unio, concatenao e
estrelaesuasregrasdeprecedncia.

Expresses Regulares: Teoria e Prtica

Definio formal de uma expresso regular


DizemosqueRumaexpressoregulareseRdescreve:
1. aparaalgumaem ;
2. ;

3. ;
4. (R1UR2)ondeR1eR2soexpressesregulares;
5. (R1oR2)ondeR1eR2soexpressesregulares,ou
6. (R1*)ondeR1umaexpressoregular.
Nos itens 1 e 2 , a expresso regular a e representam respectivamente as
linguagens{a}e{},entoRserumaexpressoregularsedescreveumacadeiaa
qualquersobreumalfabeto.Noitem3aexpressoregular representaalinguagem

vazia,assimRtambmserumaexpressoregularsedescrevealinguagemvazia.
Nositens4, 5 e6, a expresso regulardescreve aslinguagens obtidas atravs da
combinaodeunioouconcatenaodaslinguagensR1eR2,ouestreladeuma
linguagemR1,respectivamente.
Nodevemosconfundirasexpressesregulares e. Aexpresso representa
alinguagemquecontemumanicacadeiachamada,cadeiavazianoentanto

representaalinguagemquenocontemcadeias.
Aseguirveremosdetalhadamenteosoperadoresdeexpressoregularecomo
podemosuslosparaformarexpressesmaiscomplexas.

2Conceitostericos

Operaes com Expresses Regulares


Unio
A ideia de unio a mesma aplicada unio de conjuntos na matemtica
aplicadoemlinguagens.Vejamos,tomeduaslinguagens:
L1 = { a, b, c }
L2 = { 11, 01, a }
Auniodessasduaslinguagensoconjuntodecadeiasqueestnaprimeira
linguagem mais as cadeias contidas na segunda, sem considerar repeties.
DenotamosauniodeL1eL2como:
( L1 U L2 ) = {a, b, c, 11, 01}
Agoraaplicaremosesseconceitoemexpressesregulares.ConsidereR1eR2
duasexpressesregulares.AuniodeR1eR2definidacomosegue:
( R1 U R2 ) = { R1, R2 }
Paramelhorcompreendermosesseoperadorvejamosumexemplo.
Seja ={a,b,c},e(acUb)umaexpressoregular,vamosanalisaressa

expresso e compreendela. Dividindo a expresso em duas partes temos duas


expressesbsicas:
Aexpressoacquerepresentaalinguagem{ac}sobreoalfabeto eumaoutra
expressobquerepresentaalinguagem{b}sobreoalfabeto .Logoaexpresso

regular ( ac Ub)representa alinguagem{ ac,b }.Mas oqueisso significa? O


operador U nos da a idia de ou, assim entendemos portanto que ( ac U b )
representaalinguagem{ac}ou{b}.
certo que com a prtica acostumamos a entender as linguagens (e as
expressesqueasrepresentam)apenascomumolhar,semprecisarpensaremtodos
essespassos.

Expresses Regulares: Teoria e Prtica

Concatenao
Oconceitodeconcatenaoparaexpressesregularessimples,tomandoduas
expressesregulares:
R1 = ( 1 U 0 )
R2 = ( a U b )
AconcatenaodeR1eR2representadadaseguintemaneira:
R1R2 ou R1oR2
Paraentendermosquallinguagemasexpressesacimarepresentamaoserem
concatenadasolharemosmaisumavezparaasduasexpressesindividualmente:
R1 = ( 1 U 0 ) = { 1, 0 }
R2 = ( a U b ) = { a, b }
R1R2 = ( 1 U 0 )( a U b ) = { 1a, 1b, 0a, 0b}
A expresso R1 representa a linguagem { 1, 0 }, ou seja, uma cadeia de
caracteresquecontmum1ouum0,demaneiraanlogaaexpressoRrepresentaa
linguagem{a,b},ouseja,umacadeiadecaracteresquecontmumaouumb.Ao
concatenarasduasexpressesformamosumaoutraexpressoregularquerepresenta
a linguagem obtida aps a concatenao das duas linguagens representadas pelas
expresses.Paraconcatenarasduaslinguagensbastafazercomoseguenoquadro2:
R1=(1U0)

R2=(aUb)

R1R2=(1U0)(aUb)

1a

1b

0a

0b

Quadro2:Concatenaodelinguagens
Cuidado!NoesqueaqueR1R2R2R1 . A operao de concatenao no
comutativa.NotequequandofazemosR1R2temos:
( 1 U 0 )( a U b ) = { 1a, 1b, 0a, 0b }

10

2Conceitostericos
SefizermosR2R1teremos:
( a U b )( 1 U 0 ) = { a1, b1, a0, b0 }
Agoravamosanalisaraconcatenaodeduasoutrasexpressesregulares:
R1 = ( 1 U 0 )a
R2 = ( b )
R1=(1U0)a

R2=(b)

R1R2=(1U0)a(b)

1a

1ab

0a

0ab

Quadro3:Concatenaodelinguagens2
R1R2 = ( 1 U 0 )a( b ) = { 1ab, 0ab }
Logo as cadeias que comeam com 1 ou 0 seguido de ab representam a
linguagemdescritapelaconcatenaodasexpresses.

Estrela
Ooperador* (estrela)responsvelpordescreverumaquantidadeinfinitade
cadeiasapartirdeumalinguagemfinita.Podemosdefinirooperador*emtermosde
infinitasoperaesdeconcatenaoeunio:
SeRumaexpressoregularentoR*poderepresentar:
TomeR={a}

NenhumacadeiadeR,ouseja,{ };

CadeiasindividuaisdeR,oprprioconjunto{a};

CadeiasdeRconcatenadasaospares,{aa}

CadeiasdeRconcatenadasdetrsemtrs,{aaa}

Etc.

Essasequnciacontinuainfinitamente.Vejamosexemplos:
R1descrevealinguagemqueconsistede0oumaisconcatenaesdacadeiaa
ouapenasacadeiavazia.
11

Expresses Regulares: Teoria e Prtica


R1 = a* = { , a, aa, aaa, aaaa, ... }
De maneira anloga R2 descreve a linguagem que consiste de 0 ou mais
concatenaesdacadeia0oudacadeia01ouaindaapenasacadeiavazia.
R2 = ( 0 U 01 )* = { , 0, 01, 00, 0101, 000, 010101, ... }

Precedncia de operadores em expresses regulares


Podemosomitirosparntesesdeumaexpressoregularseseguirmosasregras
deprecednciadosoperadores.Noentantoosparntesessotimosparafacilitara
compreensodaexpressoregular,almdedaremmaiorprecednciaaumoperador
emumaexpresso.
Operador
*(estrela)

Maior precedncia

U(unio)
o(concatenao)

Menor precedncia

Algumas definies importantes


SejaRumaexpressoregularporconveno,temos:

RcomosendoRR*,ouseja,aexpressoRconcatenadacomR*

RU=R*

RkaconcatenaodeRkvezes

RU =R

Ro =R

RU={L(R),

},ondeL(R)alinguagemdescritaporR

Ro =

Exemplos
Assumindooalfabeto ={0,1}
12

2Conceitostericos
expresso regular
0*10*

Linguagem descrita pela expresso


Conjunto de cadeias sobre o
alfabeto que contm um nico 1

01 U 10

*001 *

{ 01, 10 }
Conjunto de cadeias sobre o
alfabeto que contm 001 como subcadeia

(0 U )(1 U )

{ , 0, 1, 01 }

Quadro4:Exemplosdeexpressesregulares

13

3 Da teoria para
a prtica

os captulos anteriores vimos toda a base


terica necessria para compreendermos o
funcionamento das expresses regulares. Este
captuloumaponteentreateoriaeaprtica,
poisabordarasadaptaesnasintaxedasERsna
parteprtica,bemcomocaractersticasadicionais.

3Dateoriaparaaprtica

Caracteres especiais
Asexpressesregularespossuemcaracteresquepossuempropriedadesespeciais.

Ponto (.)
Esteoperadorcorrespondeaqualquercaractere,menosnovalinha(\n).
Exemplo:
.a.a.o
O cavalo se assustou com o macaco.

Comeo da string (^)


Esteoperadordelimitaocomeodeumastring.
Exemplo:
^ma.{3}
mame, o mamo est verde.

Fim da string ($)


Esteoperadordelimitaofimdeumastring.
Exemplo:
.{2, 3}ma$
Calma, j vou deitar na cama

Operadores bsicos
Osoperadoresbsicosemexpressesregularessounio(|),concatenaoe
estrela(*).Entretanto,naprtica,noexisteumoperadordeconcatenaoexplcito.
Almdisso,soacrescentadososoperadoresdeumoumais(+)ezeroouum(?),que
soumaextensodosoperadoresbsicos.

Unio (|)
Na unio, se a string possuir pelo menos um dos caracteres ou grupos de
caracteresdaexpresso,elavlida.

15

Expresses Regulares: Teoria e Prtica


Exemplo:
co|cachorro|dog|perro
O cachorro est correndo.

Estrela (*)
Aoperaoestrelarepetezerooumaisvezesocaractereougrupoanterior.
Exemplo:
Para noo*ssa alegria!
Para nooooooooooooooossa alegria! Para nossa alegria!

Um ou mais (+)
Aoperao umoumais umaextensodaestrela,poisrepeteumaoumais
vezesocaractereougrupoanterior.
Exemplo:
Para no+ssa alegria!
Para nooooooooooooooossa alegria! Para nossa alegria!

Zero ou um (?)
Esta operao igual operao de unio entre uma cadeia vazia e outra
cadeia.Ouseja,elapodeounoaparecer.
Exemplo:
[Ee]u (?:no)? te amo
Querida, eu te amo.
Ahh, que pena. Eu no te amo mais!

16

3Dateoriaparaaprtica

Mais operadores
Repeties finitas
Quandosesabeaquantidadeoufaixaderepetiesquedeterminadocaractere
ougrupodecaracterespossui,utilizasedasrepetiesfinitas.
Exemplo:
[Bb]l{2, 5}|Blu
Bl. Bl, bl, bl, Blu

Conjuntos
Sosimilaresuniodevrioscaracteres.Sorepresentadosporcolchetes[].
Exemplo:
[A-Z]{3}{[123]{4}
A placa do meu carro XKJ3143.

Grupos
Gruposservemparaagruparconjuntosdecaracteresemumanicaentidade.
Sorepresentadorpor(?:<caracteres>).
Exemplo:
(?:[Hh]e)+
He, hehehehehehehhe, hehe.

17

4 Praticando com
expresses
regulares

este captulo sero abordados conceitos


prticosenvolvendoexpressesregularesno
diaadia.

4Praticandocomexpressesregulares
Esta seo abordar a aplicabilidade das expresses regulares em programas
utilizadosnomundoreal,comovalidaodeCEP,emailoutelefone.

CEP
AntesdecriarmosaexpressoregularparavalidaroCEP,temosqueentender
comoeledeveserformatado.
OCEPpossuioitodgitos,sendoqueestesdgitossodivididosemtrspartes:
58.763-000
AgoraquejsabemoscomoaformataodoCEP,vamoscriarnossaexpresso
regularpassoapasso.
OprimeiropassosubstituirosnmerospelaERcorrespondenteeutilizarum
caracteredeescape(\)antesdopronto,pararetirarmossuaspropriedadesespeciais
naER:
\d\d\.\d\d\d-\d\d\d
Senstestssemosestaexpressoregular,elafuncionaria,noentanto,utilizar
tantoscaracteresiguaisseguidosnoumaboaprtica.
Como sabemos quantos nmeros cada grupo da expresso deve ter, vamos
especificlos:
\d{2}.\d{3}-\d{3}
Agorasim!NossaERestcomumacaramaisbonita.

E-mail
AtarefadecriarERsparavalidaremailsdeformaeficazcausamuitadorde
cabeaentreosdesenvolvedores.Mas,felizmente,oobjetivodestelivronolhe
causar problemas. Porisso, iremos construir apenas verses simples de expresses
regulares.

Primeira verso
Nesta primeira verso, iremos construir uma ER bem simples, que consegue
19

Expresses Regulares: Teoria e Prtica


identificarapenasemailsnoformatousuario@exemplo.com.
ComofizemosnoexemplodoCEP,vamosdividiroemailemgrupose,passoa
passo,criarasERscorrespondentes.Emaltonvel,umemailpossuidoisgrupos:o
quevemantesedepoisdo@.
Sabemosqueumendereodeemailpodepossuirletras,nmeros,hfen(),
underscore(_)ouponto(.),masnuncaespaos.
[\w-_\.]+@[\w-_\.]+\.com
Estaprimeiraversobastantesimples.AER[\w-_\.]significaoconjuntode
caracteresaceitvelnonossoemail.Nestecaso,estescaracteressoosqueforam
mencionadosnopargrafoanterior.PercebaquequandoaquelaERaparece,elavem
seguidadeum+.Istosignificaqueelapodeserrepetidaumaoumaisvezes.

Segunda verso
Nossaprimeiraversoconseguevalidaralgunstiposdeemail.Massabemosque
existem emails que possuem domnios diferentes do .com. Para validarmos esses
novostiposdeemail,devemosestendernossaER.
Primeiro,temosqueidentificarquaisseronovosnovostiposdeemailecomo
elessoformatados.Aseguir,vocveralgunsexemplos:
usuario@exemplo.com.br
usuario@exemplo.us
usuario@exemplo.me
usuario@sub.exemplo.com.br
usuario@exemplo.name
EstessoapenasalgunsexemplosdeemailsquenossaERdevevalidar.Sevoc
perceber,existemdiversostiposdedomnionomundo.Portanto,nestecaso,aoinvs
defazerumacoisaespecficacomofizemoscomocasodo.com,devemoscriarum
padrogenrico.
Nos exemplos, parte do usurio continua intacta. Isso significa que ns no
precisaremosmudala.Jnocasodosdomnios,devemosteremmentequeumemail
20

4Praticandocomexpressesregulares
podetervriossubdomniosequealtimapartedosite(com,br,us,name,etc.)
semprepossuientredoisequatrocaracteres(apenasletras).
Apartirdaanliseacima,vamoscriarumanovaERparavalidaremails:
[\w-_\.]+@(?:[\w-_\.]+\.)+[a-zA-Z]{2,4}
AgorachegamosaumaERbemmaisgenricaqueaanterior.Vamosentendero
quehdenovonestanovaER.Vamosapenasnosdeteraoqueestapso@,poiso
quevemantesnofoimodificadoemrelaoERanterior.
A primeira mudana foi a insero de parte da ER anterior dentro de um
delimitadordegrupo(?:) seguidoporum +,queindicaqueaquelegrupopodeser
repetidoumaoumaisvezes,validando,assim,mltiplossubdomnios.
AltimapartedaER([a-zA-Z]{2,4})validaaltimapartedosite,ondeo
domniospossuiletrasdetamanhoentredoisequatro.
Mesmotendomelhoradoaexpressoregularetornadoamaisgenrica,como
foifaladonoinciodestetpico,avalidaoeemailsbastantecomplexa.Portanto,
algunsemailsreaispoderiamnopassarouemailsfalsospassaremnavalidao.

21

5 Ferramentas

este captulo sero abordadas algumas


ferramentasquesoutilizadasparacriar e
manipularexpressesregulares.

5Ferramentas
Hojeemdia,sevocquiserpesquisarporumarquivoemseusdiretrios,basta
digitaronomedodocumentodesejadonoseugerenciadordearquivos(e.g.Windows
Explorer,Nautilus,etc.)e,comomgica,dezenasdearquivoscomnomessemelhantes
aparecemparavocescolher.Noentanto,avidadosusuriosdecomputadornem
semprefoitofcilassim.
Se voc usurio Unix/Linux e utiliza a linha de comandos ou alcanou os
temposdoMSDOS,vocprovavelmentejdeveterutilizadooschamadoscaracteres
curingas(wildcards)paraselecionar/modificarmaisdeumarquivoemumdiretrio.
Por exemplo, quando usamos o comando rm *.txt, estamos excluindo todos os
arquivosqueterminamcomaextenso.txt.Estescaracteresespeciaissobastante
parecidoscomasexpressesregularesesoteisparabuscarpadressimplesnos
textos.Sefossemosutilizlasnoexemploanterior,deveramosescreverumcdigo
assim:rm .*\.txt$.
Como voc j viu nos captulos anteriores, o ponto (.) simboliza qualquer
caracterequesejadiferentedeumanovalinha.Noentanto,vocdeveprestarateno
queosegundopontonointerpretadodestaforma,poisexisteumacontrabarra(\)
antesdele.Sendoassim,eleinterpretadocomoumcaracterecomum.
Apesardeoscaracterescuringasseremteisparapequenastarefas(comoaque
foimostradaacima)suasfuncionalidadessolimitadasparapadresmaiscomplexos.
aondeentramasexpressesregulares.Pormeiodelas,podemosgerarpadres
avanadosquepossibilitamfiltrardadosdosmaisdiversostiposemtextos.
Asexpressesregularessobastanteutilizadaspordesenvolvedoresnodiaadia,
sejaparavalidarnmerosdeCPFeemailsouparadesenvolverumanalisadorlxico
deumalinguagemdeprogramao.

23

Expresses Regulares: Teoria e Prtica

Testando ERs na Web


Agora que voc j sabe que as expresses regulares possuem alguma
aplicabilidade,vamoscomearabrincarumpoucocomelas.
Existemalgunssitesdisponveisnawebqueconsegueminterpretarexpresses
regulareseretornarousubstituirostrechosdetextoquecorrespondemaopadro
inserido. Veja, a seguir, alguns sites que podem ajudlo a testar suas expresses
regulares.

RegexPal (http://regexpal.com/)
O RegexPal um sistema simples desenvolvido em Javascript que interpreta
expressesregulares.Eletilparaaconstruodeexpresses,poisvocpodetestar
emtemporealseopadroestfuncionandocorretamente.

Ilustrao1:SiteRegexPal

24

5Ferramentas

RegExr (http://gskinner.com/RegExr/)
Possui as mesmas caractersticas do sistema anterior, mas possui tambm
explicaessobrecadapadroqueestsendoformado.Almdisso,existemalguns
exemplosnabarralateralquesobemteis.

Ilustrao2:SiteRegExr

A ferramenta egrep
VocviuanteriormenteoexemplodedoissitesparamanipularERse,sevoc
pesquisarnoGooglesobreregularexpressionsonlineirencontrarmuitosoutros.
Contudo,tambmexistemferramentasnoseuprpriocomputadorquefazemusode
expressesregulares,comoocasodaferramentaegrep emsistemasUnix/Linux1.
Aferramentaegrep utilizadanalinhadecomandosparaimprimirlinhasde
arquivosquepossuemcorrespondnciasapadresdeexpressesregulares.
1

AferramentaegrepnoveminstaladaporpadronoWindows.Sevocquiserbaixaruma
ferramentasimilar,acesseoseguintesite:http://unxutils.sourceforge.net/.

25

Expresses Regulares: Teoria e Prtica


Suasintaxeaseguinte:
egrep [flags] <expressao-regular> [nome-do-arquivo]
Ondeoprimeiroargumentoumaexpressoregular(ouflags,opcionalmente)e
osegundo(opcional)oarquivodetextoaserverificado.

Flags
Oegreppossuiumasriedeopesquefacilitamoseumanuseio,estasopes
recebem o nome de flags. A seguir, voc ter uma tabela com algumas das flags
suportadaspeloegrep.
Flag

Descrio

--help

Servepara mostrarumabrevedescrio
da ferramenta e seu modo de
funcionamento.

--count

Imprime a quantidade de linhas


capturadasaoinvsdemostrlas.

--color

Colore as partes do texto que


correspondemaopadrodaER.

--only-matching

Exibe apenas as partes correspondentes


aopadroenotodaalinha.

Quadro5:Principaisflagsutilizadasnaferramentaegrep
Vamos ver quantas palavras no dicionrio de portugus contm o padro
discurso:
egrep --count "discurso" /usr/share/dict/brazilian
3

Agora,aoinvsdeimprimiraquantidade,vamossaberquaissoaspalavrasque
possuemopadro.Utilizandoaflag--color,iremoscolorirapartedaspalavrasque
correspondeaopadrodaER.
egrep --color "discurso" /usr/share/dict/brazilian
discurso
discursos
Comovocpdevernosexemplosacima,asflagssomuitoteis.Sevocquiser
discursou
26

5Ferramentas
sabermaissobrecomomanusearaferramentaegrep equaissotodasasflagsque
elapossui,digiteocomandoegrep --help.

Comeo e fim de ERs


Sevocquiserlistartodasassuaspastasnodiretrioatualquecomecemcom
determinemcoms,vocpodeusaroseguintecomando:
ls | egrep [dD].*[sS]
Desktop
Documentos
Downloads
Modelos
Vdeos
Masalgumacoisadeuerrado.Quandovocmandouimprimirosdiretriosque
comeassem com d e terminassem com s, ele tambm imprimiu Desktop,
ModeloseVdeos.Masporqu?
SevocprestaratenonasuaER,vocverqueelaircapturartudooque
possuirumd(ouD),zerooualgumcaracterenomeioedepoiss(ouS).Tanto
Desktop, Modelos ou Vdeos possuem esse padro, mesmo que ele esteja
contidonomeiodecadapalavra.
Para solucionar este problema, devemos utilizar dois caracteres que possuem
funesespeciaisnasERs,o^eo$,quesignificam,respectivamente,comeoefimda
stringasercapturada.
Ento,nossocomandoparacapturarpalavrasquecomeamcomdeterminam
comsficarassim:
ls | egrep ^[dD].*[sS]$
Documentos
Downloads
Como voc pde ver, agora o comando imprimiu apenas as palavras que
comeamcomdeterminamcoms.

27

6 Expresses
regulares com
Python

goraquejsabemosoquantoasexpresses
regulares so poderosas, iremos unilas s
facilidadesdalinguagemdeprogramaoPython
para construir nossos primeiros programas
utilizandoexpressesregularesemsuaessncia.

6ExpressesregularescomPython

A linguagem Python
Pythonumalinguageminterpretada,defcilentendimentoqueutilizadano
desenvolvimentodosmaisdiversostiposdeaplicaes,sejamelasparadesktop,web,
moveis,etc.
Como o foco deste livro no ensinar programao, se voc no souber a
linguagemPython,indicoqueleiaotutorial2oficialdalinguagem.

Aprendendo o mdulo re
Assimcomooutraslinguagensdeprogramao,Pythonpossuidiversosmdulos
(oubibliotecas).Omduloresponsvelporcriaremanusearexpressesregularesem
Pythonchamasere,deRegularExpressions.
Pormeiodomdulo re nsconseguiremoscriartudooquejfizemoscoma
ferramentaegrepe,adicionalmente,aliaropoderdeumalinguagemdeprogramao
paradesenvolvernossosprimeirosprogramas.
O mdulo re suporta3 todosos caracteres especiaisestudadosanteriormente,
como.,^,$,*,+,?,[],{},()e|,almdoscaracteresqueaceitamconjuntos,como
\d,\we\s.
Para criar e manusear as expresses regulares, devemos utilizar as funes
disponveisnomdulore.Vejaaseguirumadescriodasprincipaisfunes.

match
Tentaaplicaropadroaoincioda string.Sehouverumacorrespondncia,
retornado um objeto com a parte correspondente da string. Caso contrrio,
retornadoumobjetodotipoNone4.

2
3
4

SitecomotutorialoficialdalinguagemPythonemportugus:
http://www.python.org.br/wiki/TutorialPython
Paravertodososcaracteresespeciaisefunessuportadaspelomdulore,acesseosite:
http://docs.python.org/library/re.html
NoneumtipoespecialemPythonquesignificavazio,nulo.

29

Expresses Regulares: Teoria e Prtica


Sintaxe:
re.match(<padro>, <string>) MatchObject ouNone
Exemplo:
import re
padrao = r'in\w+'
resultado = re.match(padrao, 'interesse')
print(resultado)
resultado = re.match(padrao, 'desinteresse')
print(resultado)
<_sre.SRE_Match object at 0xb700bfa8>
Naprimeiralinhaimportadoomdulore.
None
Astringquerepresentaopadrodeveconterumrantesdasaspas,oqueindica
uma string bruta (raw string) em Python, ou seja, uma string que no interpreta
caracteresespeciaiscomo'\n',porexemplo.
Como foi mostrado na sada do programa, o primeiro resultado possui
correspondncia enquanto o segundo no. Isso acontece porque a funo match
comeaaverificaropadrodesdeocomeodastring.

search
Estafunosemelhantefunomatch,noentanto,elaescaneiatodaastring
embuscadopadroaoinvsdeverificlosnoincio.
Sintaxe:
re.search(<padro>, <string>) MatchObject ouNone
Exemplo:
import re
padrao = r'in\w+'
resultado = re.match(padrao, 'interesse')
print(resultado)
resultado = re.match(padrao, 'desinteresse')

30

6ExpressesregularescomPython
print(resultado)
<_sre.SRE_Match object at 0xb7001528>
Naprimeiralinhaimportadoomdulore.
<_sre.SRE_Match object at 0xb7001e90>
Nestecaso,foramretornadosobjetosnosdoisresultados,poisopadrotambm
estcontidonasegundastring.

findall
Estafunoretornaumalistadetodasasocorrnciasdopadronastring.
Sintaxe:
re.findall(<padro>,<string>)listadeocorrncias
Exemplo:
import re
padrao = r'in\w+'
resultado = re.match(padrao, 'Eu estou sem interesse, mas
voc est muito interessado.')
print(resultado)
['interesse', 'interessado']

sub
Estafunoretornaumastringobtidapormeiodasubstituiodasocorrncias
dopadronastringoriginalporumaoutrastring.
Sintaxe:
re.sub(<padro>, <string-sub>, <string-original>) string
Exemplo:
import re
resultado = re.sub(r'Luis', 'Luiz', 'Oi Luis, tudo bem?')
print(resultado)
Oi Luiz, tudo bem?

31

Expresses Regulares: Teoria e Prtica

Consideraes Finais
Durante a leitura deste material, voc pde aprender desde a parte
tericadeexpressesregularesvistaemcursosdeTeoriadaComputao,
comoaparteprtica,aplicandoestapoderosaferramentaaproblemas
cotidianos.
Comooobjetivodestelivroapenasintroduzirosconceitosbsicossobre
expressesregulares,muitacoisaficoudefora.Almdisso,porcausado
curto prazode tempoparaaelaboraodestaprimeiraverso,alguns
contedosnopuderamserabordadoscommaisdetalhes.
Para a prxima verso, esperase que o material seja ampliado e que
possuamaisexemploseexerccios.

32

Referncias

Referncias
BECKLES,B.;DOWLING,B.Python:RegularExpressions.[s.l.]:[s.n],2010.
FRIEDL,J.E.F.MasteringRegularExpressions.3.ed.Sebastopol:O'Reilly,2010
GALINO,W.;ROSA,W.;SAMPAIO,P.A.IntroduoaTeoriadaComputao.[Sn:.Sl
],2008.130p.
SIPSER,M.IntroductionoftheTheoryofComputation.[Boston,Massachusetts]:
ThomsonCourseTechnology,2006.436p.ISBN0534950973.

33