Expresses Regulares: Teoria e Prtica

  • Published on
    17-Dec-2014

  • View
    14.398

  • Download
    6

DESCRIPTION

 

Transcript

  • 1. UNIVERSIDADEESTADUALDAPARABA CENTRODECINCIASEXATASESOCIAISAPLICADASCAMPUSVII CURSODELICENCIATURAEMCOMPUTAO PRODUODEMATERIAISINSTRUCIONAISDocente:VtorAblioSobralDiscentes:LuizAugustodeMacedoMoraiseRivanilsondaSilvaRodriguesIntroduo a Expresses Regulares 2012
  • 2. Sumrio1Prrequisitos....................................................................................1 Introduo..................................................................................................2 BreveHistriadasExpressesRegulares....................................................2 Prrequisitos.............................................................................................2 Alfabeto..................................................................................................2 Cadeiadecaractere.................................................................................3 Tamanho.................................................................................................3 Subcadeia..............................................................................................3 Concatenao..........................................................................................4 Linguagem..............................................................................................4 ConceitosbsicossobreExpressesRegulares............................................42Conceitostericos.............................................................................7 Definioformaldeumaexpressoregular...............................................8 OperaescomExpressesRegulares.........................................................9 Unio......................................................................................................9 Concatenao..........................................................................................9 Estrela...................................................................................................11 Precednciadeoperadoresemexpressesregulares............................12 Algumasdefiniesimportantes...........................................................12 Exemplos...............................................................................................123Dateoriaparaaprtica..................................................................14 Caracteresespeciais..................................................................................15 Ponto(.)................................................................................................15 Comeodastring(^)...........................................................................15 Fimdastring($)...................................................................................15 Operadoresbsicos...................................................................................15 Unio(|)...............................................................................................15
  • 3. Estrela(*).............................................................................................16 Umoumais(+)....................................................................................16 Zeroouum(?)......................................................................................16 Maisoperadores........................................................................................17 Repetiesfinitas..................................................................................17 Conjuntos..............................................................................................17 Grupos..................................................................................................174Praticandocomexpressesregulares..............................................18 CEP...........................................................................................................19 Email.......................................................................................................19 Primeiraverso.....................................................................................19 Segundaverso.....................................................................................205Ferramentas....................................................................................22 TestandoERsnaWeb................................................................................24 RegexPal(http://regexpal.com/)..........................................................24 RegExr(http://gskinner.com/RegExr/)................................................25 Aferramentaegrep...................................................................................25 Flags......................................................................................................26 ComeoefimdeERs............................................................................276ExpressesregularescomPython...................................................28 AlinguagemPython..................................................................................29 Aprendendoomdulore..........................................................................29 match....................................................................................................29 search....................................................................................................30 findall....................................................................................................31 sub........................................................................................................31ConsideraesFinais............................................................................32Referncias..........................................................................................33
  • 4. Lista de ilustraesIlustrao1:SiteRegexPal.......................................................................................24Ilustrao2:SiteRegExr..........................................................................................25
  • 5. Lista de quadrosQuadro1:Cadeiasdecaracteres...............................................................................5Quadro2:Concatenaodelinguagens..................................................................10Quadro3:Concatenaodelinguagens2...............................................................11Quadro4:Exemplosdeexpressesregulares..........................................................13Quadro5:Principaisflagsutilizadasnaferramentaegrep......................................26
  • 6. 1 Pr-requisitosN este captulo apresentaremos alguns pr requisitos e introduziremos os primeirosconceitos sobre expresses regulares de formapuramenteterica.
  • 7. Expresses Regulares: Teoria e PrticaIntroduo Em cincia da computao, uma expresso regular uma forma concisa eflexvel de identificar cadeias de caracteres, caracteres particulares, palavras oupadres de caracteres. So largamente utilizadas em linguagens de programao,ferramentasdebuscadepadreseanalisadoreslxicos.Nestetrabalhoasexpressesregularesseroapresentadasemumprimeiromomentodeformatericabaseadonateoriadacomputaoeemumsegundomomentodeformaprtica.Breve Histria das Expresses Regulares Asexpressesregularesestoinseridasnateoriadosautmatosenateoriadaslinguagens formais, ambas fazem parte da teoria da computao. As origens dasexpressesregularesremontamadcadade50,elasforamdefinidaspelomatemticoStephenColeKleenenoanode1956noartigoRepresentationofeventsinnervenets and finite automata, Seu trabalho foi a base para os primeiros algoritmoscomputacionaisdebuscaeparaalgumasdasmaisantigasferramentasdetratamentodetextoemambientesUNIX. AtualmenteasExpressesRegularessoaplicadasnabuscaesubstituiodepalavrasemeditoresdetexto,emlinguagensdeprogramao,validaodeformatosdetexto(ouprotocolos),filtragemdeinformaoeetc.Pr-requisitos Antesde conhecer conceitosbsicos sobreexpressesregulares,definiremosalgunsconceitosfundamentaisparaasuacompreenso.Alfabeto Um Alfabeto qualquer conjunto de smbolos finito no vazio. Geralmenteusamosaletragrega paradesignarumalfabetodesmbolos.Aseguirtemosalgunsexemplosdealfabetos: 1 ={0,1}; 2
  • 8. 1Prrequisitos 2 ={a,b,c,d,e} 3 ={0,1,2,a,b} Osmembrosdeumalfabetosodenominadossmbolosdoalfabeto. Cadeia de caractere Oconceitodecadeiadecaracterefundamentalmenteconstrudoemcinciadacomputao. Uma cadeia de caracteres uma sequncia finita de smbolos. Umacadeia de caracteres sobre um alfabeto uma sequncia finita de smbolos quepertencemaumalfabeto,ouseja,umaformaparticulardecadeiadecaractereondecadaelementodacadeiapertenceaumalfabeto. Tomando 1comoalfabetoento 01001umacadeiasobre 1.Agorase4={a,b,c,d,e,...,z},entoabracadabra umacadeiasobre4. Usualmenteescrevemoscadaelementodacadeiadecaracterejuntoumdooutroesemvrgulas.Tamanho Se w forumacadeiaqualquersobreumalfabeto qualquer,otamanhodew,serescritocomo|w|,otamanhoseronmerodesmbolosque w contm.Umacadeiadecaracteresdetamanhozerochamadadecadeiavaziaeserescritapordefiniocomo. Exemplo: ={0,1}; w=001001 |w|=6Sub-cadeia Sejawumacadeiadecaracteresdizemosquezumasubcadeiadewsezfazpartedew.Porexemplo,acadeiaabraumasubcadeiadeabracadabra. 3
  • 9. Expresses Regulares: Teoria e PrticaConcatenao Podemosconcatenarduascadeiasdecaracteres,sejam x e y duascadeiasdecaracteres, escrevemos a concatenao de x e y como x1...xny1...ym, a cadeia queobtemosaoconcatenarofimdacadeiaxaoiniciodacadeiayxyouxy. A concatenao de uma cadeia de caractere com ela mesma usa a seguintenotao: Ondekonmerodevezesquexconcatenadocomeleprprio. Exemplo: Sejamxeyduascadeiasdecaracteresondex=olaey=mundo xy=olamundo yx=mundoola x2=olaolaLinguagem Umalinguagemumconjuntodecadeias.Conceitos bsicos sobre Expresses Regulares Emteoriadacomputaoexpressesregularessodescritoresdelinguagens,ouseja,apartirdestasexpressespodemosidentificarumalinguagemregulareescrevlausandoexpresses. Na matemtica podemos usar os operadores de soma, e multiplicao paraconstruirexpressescomoaquesegue: ( 2 + 3 ) 5 4
  • 10. 1Prrequisitos De maneira anloga, podemos usar operaes regulares para construirexpressesquedescrevemlinguagens,estassochamadasexpressesregulares.Umexemplodeexpressoregular: ( 0 U 1 )0* Oresultadodaexpressoaritmticaacimaonmero30.Oresultadodeumaexpressoregularumalinguagem.Nestecasooresultadodaexpressoregulara3linguagemqueconsistedetodasascadeiasdecaracterespossveiscomeandocom0ou1seguidoporumnmeroqualquerde0s(zeros)inclusivenenhum,ouseja,alinguagemrepresentaoconjuntodetodasascadeiasdecaracteresquecomeamcom0oucom1eterminamcomumnmeroqualquerdezeros.Assimaexpressoregularacimadescrevedentreoutras,ascadeiasdecaracteresmostradasnoQuadro1: Cadeiasde Iniciodacadeia Nmerodezerosno caracteres finaldacadeia 1 1 0(zero) 10 1 1 000 0 2 1000 1 3 00000 0 4 100000 1 5 1000000 1 6 00000000 0 7Quadro1:Cadeiasdecaracteres Paraexemplificarousodeexpressesregulares,tomeseguintelinguagem:oconjunto de cadeias de 0s (zeros) e 1s (ums) tais que comece com qualquerquantidade de 1s (inclusive nenhum), seguidos necessariamente deum 0 e outrasequnciacomqualquerquantidadede1s. 5
  • 11. Expresses Regulares: Teoria e Prtica Essalinguagemaparentementecomplexapodeserescritafacilmenteemformadeexpressoregular: 1*01* Notequeapesarderepresentarumconjuntodecadeiasdecaracteres,ouseja,umalinguagem,asexpressesregularestambmparecemcadeias.Assimasexpressesregularesestarosempredestacadasemnegrito. 6
  • 12. 2 Conceitos tericosN este captulo apresentaremos a definio formaldeumaexpressoregular,bemcomoos operadores regulares unio, concatenao eestrelaesuasregrasdeprecedncia.
  • 13. Expresses Regulares: Teoria e PrticaDefinio 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 aslinguagens{a}e{},entoRserumaexpressoregularsedescreveumacadeiaaqualquersobreumalfabeto.Noitem3aexpressoregular representaalinguagem vazia,assimRtambmserumaexpressoregularsedescrevealinguagemvazia.Nositens4, 5 e6, a expresso regulardescreve aslinguagens obtidas atravs dacombinaodeunioouconcatenaodaslinguagensR1eR2,ouestreladeumalinguagemR1,respectivamente. Nodevemosconfundirasexpressesregulares e. Aexpresso representaalinguagemquecontemumanicacadeiachamada,cadeiavazianoentanto representaalinguagemquenocontemcadeias. Aseguirveremosdetalhadamenteosoperadoresdeexpressoregularecomopodemosuslosparaformarexpressesmaiscomplexas. 8
  • 14. 2ConceitostericosOperaes com Expresses RegularesUnio A ideia de unio a mesma aplicada unio de conjuntos na matemticaaplicadoemlinguagens.Vejamos,tomeduaslinguagens: L1 = { a, b, c } L2 = { 11, 01, a } Auniodessasduaslinguagensoconjuntodecadeiasqueestnaprimeiralinguagem mais as cadeias contidas na segunda, sem considerar repeties.DenotamosauniodeL1eL2como: ( L1 U L2 ) = {a, b, c, 11, 01} Agoraaplicaremosesseconceitoemexpressesregulares.ConsidereR1eR2duasexpressesregulares.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 duasexpressesbsicas: Aexpressoacquerepresentaalinguagem{ac}sobreoalfabeto eumaoutraexpressobquerepresentaalinguagem{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 asexpressesqueasrepresentam)apenascomumolhar,semprecisarpensaremtodosessespassos. 9
  • 15. 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)1 a 1a1 b 1b0 a 0a0 b 0bQuadro2:Concatenaodelinguagens Cuidado!NoesqueaqueR1R2R2R1 . A operao de concatenao no comutativa.NotequequandofazemosR1R2temos: ( 1 U 0 )( a U b ) = { 1a, 1b, 0a, 0b } 10
  • 16. 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 b 1ab0a b 0abQuadro3: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
  • 17. Expresses Regulares: Teoria e Prtica R1 = a* = { , a, aa, aaa, aaaa, ... } De maneira anloga R2 descreve a linguagem que consiste de 0 ou maisconcatenaesdacadeia0oudacadeia01ouaindaapenasacadeiavazia. R2 = ( 0 U 01 )* = { , 0, 01, 00, 0101, 000, 010101, ... }Precedncia de operadores em expresses regulares Podemosomitirosparntesesdeumaexpressoregularseseguirmosasregrasdeprecednciadosoperadores.Noentantoosparntesessotimosparafacilitaracompreensodaexpressoregular,almdedaremmaiorprecednciaaumoperadoremumaexpresso. Operador Maior precedncia *(estrela) U(unio) o(concatenao) Menor precednciaAlgumas 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
  • 18. 2Conceitostericos expresso regular Linguagem descrita pela expresso 0*10* Conjunto de cadeias sobre o alfabeto que contm um nico 1 01 U 10 { 01, 10 } *001 * Conjunto de cadeias sobre o alfabeto que contm 001 como sub- cadeia (0 U )(1 U ) { , 0, 1, 01 }Quadro4:Exemplosdeexpressesregulares 13
  • 19. 3 Da teoria para a prticaN os captulos anteriores vimos toda a base terica necessria para compreendermos ofuncionamento das expresses regulares. Estecaptuloumaponteentreateoriaeaprtica,poisabordarasadaptaesnasintaxedasERsnaparteprtica,bemcomocaractersticasadicionais.
  • 20. 3DateoriaparaaprticaCaracteres 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 camaOperadores bsicos Osoperadoresbsicosemexpressesregularessounio(|),concatenaoeestrela(*).Entretanto,naprtica,noexisteumoperadordeconcatenaoexplcito.Almdisso,soacrescentadososoperadoresdeumoumais(+)ezeroouum(?),quesoumaextensodosoperadoresbsicos.Unio (|) Na unio, se a string possuir pelo menos um dos caracteres ou grupos decaracteresdaexpresso,elavlida. 15
  • 21. 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,poisrepeteumaoumaisvezesocaractereougrupoanterior. 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 outracadeia.Ouseja,elapodeounoaparecer. Exemplo: [Ee]u (?:no)? te amo Querida, eu te amo. Ahh, que pena. Eu no te amo mais! 16
  • 22. 3DateoriaparaaprticaMais operadoresRepeties finitas Quandosesabeaquantidadeoufaixaderepetiesquedeterminadocaractereougrupodecaracterespossui,utilizasedasrepetiesfinitas. Exemplo: [Bb]l{2, 5}|Blu Bl. Bl, bl, bl, BluConjuntos Sosimilaresuniodevrioscaracteres.Sorepresentadosporcolchetes[]. Exemplo: [A-Z]{3}{[123]{4} A placa do meu carro XKJ3143.Grupos Gruposservemparaagruparconjuntosdecaracteresemumanicaentidade. Sorepresentadorpor(?:). Exemplo: (?:[Hh]e)+ He, hehehehehehehhe, hehe. 17
  • 23. 4 Praticando com expresses regularesN este captulo sero abordados conceitos prticosenvolvendoexpressesregularesnodiaadia.
  • 24. 4Praticandocomexpressesregulares Esta seo abordar a aplicabilidade das expresses regulares em programasutilizadosnomundoreal,comovalidaodeCEP,emailoutelefone.CEP AntesdecriarmosaexpressoregularparavalidaroCEP,temosqueentendercomoeledeveserformatado. OCEPpossuioitodgitos,sendoqueestesdgitossodivididosemtrspartes: 58.763-000 AgoraquejsabemoscomoaformataodoCEP,vamoscriarnossaexpressoregularpassoapasso. OprimeiropassosubstituirosnmerospelaERcorrespondenteeutilizarumcaracteredeescape()antesdopronto,pararetirarmossuaspropriedadesespeciaisnaER: dd.ddd-ddd Senstestssemosestaexpressoregular,elafuncionaria,noentanto,utilizartantoscaracteresiguaisseguidosnoumaboaprtica. Como sabemos quantos nmeros cada grupo da expresso deve ter, vamosespecificlos: d{2}.d{3}-d{3} Agorasim!NossaERestcomumacaramaisbonita.E-mail AtarefadecriarERsparavalidaremailsdeformaeficazcausamuitadordecabeaentreosdesenvolvedores.Mas,felizmente,oobjetivodestelivronolhecausar problemas. Porisso, iremos construir apenas verses simples de expressesregulares.Primeira verso Nesta primeira verso, iremos construir uma ER bem simples, que consegue 19
  • 25. Expresses Regulares: Teoria e Prticaidentificarapenasemailsnoformatousuario@exemplo.com. ComofizemosnoexemplodoCEP,vamosdividiroemailemgrupose,passoapasso,criarasERscorrespondentes.Emaltonvel,umemailpossuidoisgrupos:oquevemantesedepoisdo@. Sabemosqueumendereodeemailpodepossuirletras,nmeros,hfen(),underscore(_)ouponto(.),masnuncaespaos. [w-_.]+@[w-_.]+.com Estaprimeiraversobastantesimples.AER[w-_.]significaoconjuntodecaracteresaceitvelnonossoemail.Nestecaso,estescaracteressoosqueforammencionadosnopargrafoanterior.PercebaquequandoaquelaERaparece,elavemseguidadeum+.Istosignificaqueelapodeserrepetidaumaoumaisvezes.Segunda verso Nossaprimeiraversoconseguevalidaralgunstiposdeemail.Massabemosqueexistem emails que possuem domnios diferentes do .com. Para validarmos essesnovostiposdeemail,devemosestendernossaER. Primeiro,temosqueidentificarquaisseronovosnovostiposdeemailecomoelessoformatados.Aseguir,vocveralgunsexemplos: usuario@exemplo.com.br usuario@exemplo.us usuario@exemplo.me usuario@sub.exemplo.com.br usuario@exemplo.name EstessoapenasalgunsexemplosdeemailsquenossaERdevevalidar.Sevocperceber,existemdiversostiposdedomnionomundo.Portanto,nestecaso,aoinvsdefazerumacoisaespecficacomofizemoscomocasodo.com,devemoscriarumpadrogenrico. Nos exemplos, parte do usurio continua intacta. Isso significa que ns noprecisaremosmudala.Jnocasodosdomnios,devemosteremmentequeumemail 20
  • 26. 4Praticandocomexpressesregularespodetervriossubdomniosequealtimapartedosite(com,br,us,name,etc.)semprepossuientredoisequatrocaracteres(apenasletras). Apartirdaanliseacima,vamoscriarumanovaERparavalidaremails: [w-_.]+@(?:[w-_.]+.)+[a-zA-Z]{2,4} AgorachegamosaumaERbemmaisgenricaqueaanterior.VamosentenderoquehdenovonestanovaER.Vamosapenasnosdeteraoqueestapso@,poisoquevemantesnofoimodificadoemrelaoERanterior. A primeira mudana foi a insero de parte da ER anterior dentro de umdelimitadordegrupo(?:) seguidoporum +,queindicaqueaquelegrupopodeserrepetidoumaoumaisvezes,validando,assim,mltiplossubdomnios. AltimapartedaER([a-zA-Z]{2,4})validaaltimapartedosite,ondeodomniospossuiletrasdetamanhoentredoisequatro. Mesmotendomelhoradoaexpressoregularetornadoamaisgenrica,comofoifaladonoinciodestetpico,avalidaoeemailsbastantecomplexa.Portanto,algunsemailsreaispoderiamnopassarouemailsfalsospassaremnavalidao. 21
  • 27. 5 FerramentasN este captulo sero abordadas algumas ferramentasquesoutilizadasparacriar emanipularexpressesregulares.
  • 28. 5Ferramentas Hojeemdia,sevocquiserpesquisarporumarquivoemseusdiretrios,bastadigitaronomedodocumentodesejadonoseugerenciadordearquivos(e.g.WindowsExplorer,Nautilus,etc.)e,comomgica,dezenasdearquivoscomnomessemelhantesaparecemparavocescolher.Noentanto,avidadosusuriosdecomputadornemsemprefoitofcilassim. Se voc usurio Unix/Linux e utiliza a linha de comandos ou alcanou ostemposdoMSDOS,vocprovavelmentejdeveterutilizadooschamadoscaracterescuringas(wildcards)paraselecionar/modificarmaisdeumarquivoemumdiretrio.Por exemplo, quando usamos o comando rm *.txt, estamos excluindo todos osarquivosqueterminamcomaextenso.txt.Estescaracteresespeciaissobastanteparecidoscomasexpressesregularesesoteisparabuscarpadressimplesnostextos.Sefossemosutilizlasnoexemploanterior,deveramosescreverumcdigoassim:rm .*.txt$. Como voc j viu nos captulos anteriores, o ponto (.) simboliza qualquercaracterequesejadiferentedeumanovalinha.Noentanto,vocdeveprestaratenoqueosegundopontonointerpretadodestaforma,poisexisteumacontrabarra()antesdele.Sendoassim,eleinterpretadocomoumcaracterecomum. Apesardeoscaracterescuringasseremteisparapequenastarefas(comoaquefoimostradaacima)suasfuncionalidadessolimitadasparapadresmaiscomplexos.aondeentramasexpressesregulares.Pormeiodelas,podemosgerarpadresavanadosquepossibilitamfiltrardadosdosmaisdiversostiposemtextos. Asexpressesregularessobastanteutilizadaspordesenvolvedoresnodiaadia,sejaparavalidarnmerosdeCPFeemailsouparadesenvolverumanalisadorlxicodeumalinguagemdeprogramao. 23
  • 29. Expresses Regulares: Teoria e PrticaTestando ERs na Web Agora que voc j sabe que as expresses regulares possuem algumaaplicabilidade,vamoscomearabrincarumpoucocomelas. Existemalgunssitesdisponveisnawebqueconsegueminterpretarexpressesregulareseretornarousubstituirostrechosdetextoquecorrespondemaopadroinserido. Veja, a seguir, alguns sites que podem ajudlo a testar suas expressesregulares.RegexPal (http://regexpal.com/) O RegexPal um sistema simples desenvolvido em Javascript que interpretaexpressesregulares.Eletilparaaconstruodeexpresses,poisvocpodetestaremtemporealseopadroestfuncionandocorretamente. Ilustrao1:SiteRegexPal 24
  • 30. 5FerramentasRegExr (http://gskinner.com/RegExr/) Possui as mesmas caractersticas do sistema anterior, mas possui tambmexplicaessobrecadapadroqueestsendoformado.Almdisso,existemalgunsexemplosnabarralateralquesobemteis. Ilustrao2:SiteRegExrA ferramenta egrep VocviuanteriormenteoexemplodedoissitesparamanipularERse,sevocpesquisarnoGooglesobreregularexpressionsonlineirencontrarmuitosoutros.Contudo,tambmexistemferramentasnoseuprpriocomputadorquefazemusodeexpressesregulares,comoocasodaferramentaegrep emsistemasUnix/Linux1. Aferramentaegrep utilizadanalinhadecomandosparaimprimirlinhasdearquivosquepossuemcorrespondnciasapadresdeexpressesregulares.1 AferramentaegrepnoveminstaladaporpadronoWindows.Sevocquiserbaixaruma ferramentasimilar,acesseoseguintesite:http://unxutils.sourceforge.net/. 25
  • 31. Expresses Regulares: Teoria e Prtica Suasintaxeaseguinte: egrep [flags] [nome-do-arquivo] Ondeoprimeiroargumentoumaexpressoregular(ouflags,opcionalmente)eosegundo(opcional)oarquivodetextoaserverificado.Flags Oegreppossuiumasriedeopesquefacilitamoseumanuseio,estasopesrecebem o nome de flags. A seguir, voc ter uma tabela com algumas das flagssuportadaspeloegrep. Flag Descrio Servepara mostrarumabrevedescrio --help da ferramenta e seu modo de funcionamento. Imprime a quantidade de linhas --count capturadasaoinvsdemostrlas. Colore as partes do texto que --color correspondemaopadrodaER. Exibe apenas as partes correspondentes --only-matching aopadroenotodaalinha.Quadro5:Principaisflagsutilizadasnaferramentaegrep Vamos ver quantas palavras no dicionrio de portugus contm o padrodiscurso: egrep --count "discurso" /usr/share/dict/brazilian 3 Agora,aoinvsdeimprimiraquantidade,vamossaberquaissoaspalavrasquepossuemopadro.Utilizandoaflag--color,iremoscolorirapartedaspalavrasquecorrespondeaopadrodaER. egrep --color "discurso" /usr/share/dict/brazilian discurso discursos Comovocpdevernosexemplosacima,asflagssomuitoteis.Sevocquiser discursou 26
  • 32. 5Ferramentassabermaissobrecomomanusearaferramentaegrep equaissotodasasflagsqueelapossui,digiteocomandoegrep --help.Comeo e fim de ERs Sevocquiserlistartodasassuaspastasnodiretrioatualquecomecemcomdeterminemcoms,vocpodeusaroseguintecomando: ls | egrep [dD].*[sS] Desktop Documentos Downloads Modelos Vdeos Masalgumacoisadeuerrado.Quandovocmandouimprimirosdiretriosquecomeassem com d e terminassem com s, ele tambm imprimiu Desktop,ModeloseVdeos.Masporqu? SevocprestaratenonasuaER,vocverqueelaircapturartudooquepossuirumd(ouD),zerooualgumcaracterenomeioedepoiss(ouS).TantoDesktop, Modelos ou Vdeos possuem esse padro, mesmo que ele estejacontidonomeiodecadapalavra. Para solucionar este problema, devemos utilizar dois caracteres que possuemfunesespeciaisnasERs,o^eo$,quesignificam,respectivamente,comeoefimdastringasercapturada. Ento,nossocomandoparacapturarpalavrasquecomeamcomdeterminamcomsficarassim: ls | egrep ^[dD].*[sS]$ Documentos Downloads Como voc pde ver, agora o comando imprimiu apenas as palavras quecomeamcomdeterminamcoms. 27
  • 33. 6 Expresses regulares com PythonA goraquejsabemosoquantoasexpresses regulares so poderosas, iremos unilas sfacilidadesdalinguagemdeprogramaoPythonpara construir nossos primeiros programasutilizandoexpressesregularesemsuaessncia.
  • 34. 6ExpressesregularescomPythonA linguagem Python Pythonumalinguageminterpretada,defcilentendimentoqueutilizadanodesenvolvimentodosmaisdiversostiposdeaplicaes,sejamelasparadesktop,web,moveis,etc. Como o foco deste livro no ensinar programao, se voc no souber alinguagemPython,indicoqueleiaotutorial2oficialdalinguagem.Aprendendo o mdulo re Assimcomooutraslinguagensdeprogramao,Pythonpossuidiversosmdulos(oubibliotecas).OmduloresponsvelporcriaremanusearexpressesregularesemPythonchamasere,deRegularExpressions. Pormeiodomdulo re nsconseguiremoscriartudooquejfizemoscomaferramentaegrepe,adicionalmente,aliaropoderdeumalinguagemdeprogramaoparadesenvolvernossosprimeirosprogramas. O mdulo re suporta3 todosos caracteres especiaisestudadosanteriormente,como.,^,$,*,+,?,[],{},()e|,almdoscaracteresqueaceitamconjuntos,comod,wes. Para criar e manusear as expresses regulares, devemos utilizar as funesdisponveisnomdulore.Vejaaseguirumadescriodasprincipaisfunes.match Tentaaplicaropadroaoincioda string.Sehouverumacorrespondncia,retornado um objeto com a parte correspondente da string. Caso contrrio, retornadoumobjetodotipoNone4.2 SitecomotutorialoficialdalinguagemPythonemportugus: http://www.python.org.br/wiki/TutorialPython3 Paravertodososcaracteresespeciaisefunessuportadaspelomdulore,acesseosite: http://docs.python.org/library/re.html4 NoneumtipoespecialemPythonquesignificavazio,nulo. 29
  • 35. Expresses Regulares: Teoria e Prtica Sintaxe: re.match(, ) MatchObject ouNone Exemplo: import re padrao = rinw+ resultado = re.match(padrao, interesse) print(resultado) resultado = re.match(padrao, desinteresse) print(resultado) Naprimeiralinhaimportadoomdulore. None Astringquerepresentaopadrodeveconterumrantesdasaspas,oqueindicauma string bruta (raw string) em Python, ou seja, uma string que no interpretacaracteresespeciaiscomon,porexemplo. Como foi mostrado na sada do programa, o primeiro resultado possuicorrespondncia enquanto o segundo no. Isso acontece porque a funo matchcomeaaverificaropadrodesdeocomeodastring.search Estafunosemelhantefunomatch,noentanto,elaescaneiatodaastringembuscadopadroaoinvsdeverificlosnoincio. Sintaxe: re.search(, ) MatchObject ouNone Exemplo: import re padrao = rinw+ resultado = re.match(padrao, interesse) print(resultado) resultado = re.match(padrao, desinteresse) 30
  • 36. 6ExpressesregularescomPython print(resultado) Naprimeiralinhaimportadoomdulore. Nestecaso,foramretornadosobjetosnosdoisresultados,poisopadrotambmestcontidonasegundastring.findall Estafunoretornaumalistadetodasasocorrnciasdopadronastring. Sintaxe: re.findall(,)listadeocorrncias Exemplo: import re padrao = rinw+ resultado = re.match(padrao, Eu estou sem interesse, mas voc est muito interessado.) print(resultado) [interesse, interessado]sub Estafunoretornaumastringobtidapormeiodasubstituiodasocorrnciasdopadronastringoriginalporumaoutrastring. Sintaxe: re.sub(, , ) string Exemplo: import re resultado = re.sub(rLuis, Luiz, Oi Luis, tudo bem?) print(resultado) Oi Luiz, tudo bem? 31
  • 37. Expresses Regulares: Teoria e PrticaConsideraes FinaisDurante a leitura deste material, voc pde aprender desde a partetericadeexpressesregularesvistaemcursosdeTeoriadaComputao,comoaparteprtica,aplicandoestapoderosaferramentaaproblemascotidianos.Comooobjetivodestelivroapenasintroduzirosconceitosbsicossobreexpressesregulares,muitacoisaficoudefora.Almdisso,porcausadocurto prazode tempoparaaelaboraodestaprimeiraverso,algunscontedosnopuderamserabordadoscommaisdetalhes.Para a prxima verso, esperase que o material seja ampliado e quepossuamaisexemploseexerccios. 32
  • 38. RefernciasRefernciasBECKLES,B.;DOWLING,B.Python:RegularExpressions.[s.l.]:[s.n],2010.FRIEDL,J.E.F.MasteringRegularExpressions.3.ed.Sebastopol:OReilly,2010GALINO,W.;ROSA,W.;SAMPAIO,P.A.IntroduoaTeoriadaComputao.[Sn:.Sl],2008.130p.SIPSER,M.IntroductionoftheTheoryofComputation.[Boston,Massachusetts]:ThomsonCourseTechnology,2006.436p.ISBN0534950973. 33