Expressoes Regulares: Teoria e Pratica

  • Published on
    25-Jul-2015

  • View
    116

  • Download
    25

Transcript

UNIVERSIDADEESTADUALDAPARABA CENTRODECINCIASEXATASESOCIAISAPLICADASCAMPUSVII CURSODELICENCIATURAEMCOMPUTAO PRODUODEMATERIAISINSTRUCIONAIS

Docente:VtorAblioSobral Discentes:LuizAugustodeMacedoMoraiseRivanilsondaSilvaRodrigues

Introduo a Expresses Regulares

2012

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

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

3Dateoriaparaaprtica..................................................................14Caracteresespeciais..................................................................................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..............................................18CEP...........................................................................................................19 Email.......................................................................................................19 Primeiraverso.....................................................................................19 Segundaverso.....................................................................................20

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

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

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

Lista de ilustraesIlustrao1:SiteRegexPal.......................................................................................24 Ilustrao2:SiteRegExr..........................................................................................25

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

1 Pr-requisitos

N

este captulo apresentaremos alguns pr requisitos e introduziremos os primeiros conceitos sobre expresses regulares de forma puramenteterica.

Expresses Regulares: Teoria e Prtica

IntroduoEm 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 RegularesAsexpressesregularesestoinseridasnateoriadosautmatosenateoriadas 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-requisitosAntesde conhecer conceitosbsicos sobreexpressesregulares,definiremos algunsconceitosfundamentaisparaasuacompreenso.

AlfabetoUm 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 caractereOconceitodecadeiadecaracterefundamentalmenteconstrudoemcinciada 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.

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

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

Sub-cadeiaSejawumacadeiadecaracteresdizemosquezumasubcadeiadewsezfaz partedew.Porexemplo,acadeiaabraumasubcadeiadeabracadabra.

3

Expresses Regulares: Teoria e Prtica

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

LinguagemUmalinguagemumconjuntodecadeias.

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

4

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 1 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. Iniciodacadeia 1 1 0 1 0 1 1 0 Nmerodezerosno finaldacadeia 0(zero) 1 2 3 4 5 6 7

5

Expresses Regulares: Teoria e Prtica Essalinguagemaparentementecomplexapodeserescritafacilmenteemforma deexpressoregular: 1*01* Notequeapesarderepresentarumconjuntodecadeiasdecaracteres,ouseja, umalinguagem,asexpressesregularestambmparecemcadeias.Assimas expressesregularesestarosempredestacadasemnegrito.

6

2 Conceitos tericos

N

este captulo apresentaremos a definio formaldeumaexpressoregular,bemcomo os operadores regulares unio, concatenao e estrelaesuasregrasdeprecedncia.

Expresses Regulares: Teoria e Prtica

Definio formal de uma expresso regularDizemosqueRumaexpressoregulareseRdescreve: 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.

8

2Conceitostericos

Operaes com Expresses RegularesUnioA 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.

9

Expresses Regulares: Teoria e Prtica

ConcatenaoOconceitodeconcatenaoparaexpressesregularessimples,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) 1 1 0 0 a b a b 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 1a 0a b b R2=(b) R1R2=(1U0)a(b) 1ab 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.

EstrelaOoperador* (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 regularesPodemosomitirosparntesesdeumaexpressoregularseseguirmosasregras deprecednciadosoperadores.Noentantoosparntesessotimosparafacilitara compreensodaexpressoregular,almdedaremmaiorprecednciaaumoperador emumaexpresso. Operador *(estrela) U(unio) o(concatenao) Maior precedncia

Menor precedncia

Algumas definies importantesSejaRumaexpressoregularporconveno,temos: RcomosendoRR*,ouseja,aexpressoRconcatenadacomR* RU=R* RkaconcatenaodeRkvezes RU =R Ro =R RU={L(R),},ondeL(R)alinguagemdescritaporR Ro =

ExemplosAssumindooalfabeto ={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 { 01, 10 } Conjunto de cadeias sobre o alfabeto que contm 001 como subcadeia (0 U )(1 U ) Quadro4:Exemplosdeexpressesregulares { , 0, 1, 01 }

*001 *

13

3 Da teoria para a prtica

N

os captulos anteriores vimos toda a base terica necessria para compreendermos o funcionamento das expresses regulares. Este captuloumaponteentreateoriaeaprtica, poisabordarasadaptaesnasintaxedasERsna parteprtica,bemcomocaractersticasadicionais.

3Dateoriaparaaprtica

Caracteres especiaisAsexpressesregularespossuemcaracteresquepossuempropriedadesespeciais.

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 bsicosOsoperadoresbsicosemexpressesregularessounio(|),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 operadoresRepeties finitasQuandosesabeaquantidadeoufaixaderepetiesquedeterminadocaractere ougrupodecaracterespossui,utilizasedasrepetiesfinitas. Exemplo: [Bb]l{2, 5}|Blu Bl. Bl, bl, bl, Blu

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

GruposGruposservemparaagruparconjuntosdecaracteresemumanicaentidade. Sorepresentadorpor(?:). Exemplo: (?:[Hh]e)+ He, hehehehehehehhe, hehe.

17

4 Praticando com expresses regulares

N

este captulo sero abordados conceitos prticosenvolvendoexpressesregularesno diaadia.

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

CEPAntesdecriarmosaexpressoregularparavalidaroCEP ,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-mailAtarefadecriarERsparavalidaremailsdeformaeficazcausamuitadorde cabeaentreosdesenvolvedores.Mas,felizmente,oobjetivodestelivronolhe causar problemas. Porisso, iremos construir apenas verses simples de expresses regulares.

Primeira versoNesta 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 versoNossaprimeiraversoconseguevalidaralgunstiposdeemail.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

N

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 WebAgora 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 egrepVocviuanteriormenteoexemplodedoissitesparamanipularERse,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] [nome-do-arquivo] Ondeoprimeiroargumentoumaexpressoregular(ouflags,opcionalmente)e osegundo(opcional)oarquivodetextoaserverificado.

FlagsOegreppossuiumasriedeopesquefacilitamoseumanuseio,estasopes recebem o nome de flags. A seguir, voc ter uma tabela com algumas das flags suportadaspeloegrep. Flag --help --count --color --only-matching Descrio Servepara mostrarumabrevedescrio da ferramenta e seu modo de funcionamento. Imprime a quantidade de linhas capturadasaoinvsdemostrlas. Colore as partes do texto que correspondemaopadrodaER. 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 ERsSevocquiserlistartodasassuaspastasnodiretrioatualquecomecemcom 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

A

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

6ExpressesregularescomPython

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

Aprendendo o mdulo reAssimcomooutraslinguagensdeprogramao,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.

matchTentaaplicaropadroaoincioda 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(, ) MatchObject ouNone Exemplo: import re padrao = r'in\w+' resultado = re.match(padrao, 'interesse') print(resultado) resultado = re.match(padrao, 'desinteresse') print(resultado) 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.

searchEstafunosemelhantefunomatch,noentanto,elaescaneiatodaastring embuscadopadroaoinvsdeverificlosnoincio. Sintaxe: re.search(, ) 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) Naprimeiralinhaimportadoomdulore. Nestecaso,foramretornadosobjetosnosdoisresultados,poisopadrotambm estcontidonasegundastring.

findallEstafunoretornaumalistadetodasasocorrnciasdopadronastring. Sintaxe: re.findall(,)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']

subEstafunoretornaumastringobtidapormeiodasubstituiodasocorrncias dopadronastringoriginalporumaoutrastring. Sintaxe: re.sub(, , ) 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

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