expressões-regulares-capitulo1-2.pdf

Upload: guardalixo

Post on 08-Aug-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    1/18

    Novatec

    Aurelio Marinho Jargas

    4 Edio Revisada e Ampliada

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    2/18

    Copyright 2006, 2008, 2009, 2012 da Novatec Editora Ltda.

    Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta obra, mesmo parcial, por qualquer processo,sem prvia autorizao, por escrito, do autor e da Editora.

    Editor: Rubens PratesReviso de textos: Marta Almeida de SCapa, projeto grfco e editorao eletrnica: Karine HermesAdaptao do projeto grfco: Carolina KuwabataIlustrao da capa: Vinicius Vogel

    ISBN: 978-85-7522-337-6

    Histrico de impresses:

    Outubro/2012 Quarta edio (ISBN: 978-85-7522-337-6)Junho/2011 Primeira reimpresso

    Setembro/2009 Terceira edio (ISBN: 978-85-7522-212-6)Julho/2008 Segunda edio (ISBN: 978-85-7522-173-0)Novembro/2006 Primeira edio (ISBN: 85-7522-100-0)

    Novatec Editora Ltda.Rua Lus Antnio dos Santos 11002460-000 So Paulo, SP BrasilTel.: +55 11 2959-6529Fax: +55 11 2950-8869E-mail: [email protected]: www.novatec.com.brTwitter: twitter.com/novateceditoraFacebook: acebook.com/novatecLinkedIn: linkedin.com/in/novatec

    Dados Internacionais de Catalogao na Publicao (CIP)(Cmara Brasileira do Livro, SP, Brasil)

    Jargas, Aurlio MarinhoExpresses regulares : uma abordagem divertida /

    Aurlio Marinho Jargas. -- 4. ed. rev. e ampl. --So Paulo : Novatec Editora, 2012.

    ISBN 978-85-7522-337-6

    1. Expresses regulares I. Ttulo.

    12-12812 CDD-005.115

    ndices para catlogo sistemtico:

    1. Expresses regulares : Cincia da computao005.115

    VC20121022

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    3/18

    17[ ]

    Ol. Que tal esquecer um pouco a rotina e a realidade e azer uma viagemao interior de sua mente? Descobrir conceitos novos, dierentes. Ao voltar,as coisas no sero mais to normais quanto antes, pois smbolos estranhosaro parte de seu dia a dia.

    Inspirado pelo uncionamento de seus prprios neurnios, descubra oascinante mundo abstrato das expresses regulares.

    Objetivo

    Neste nosso mundo tecnoinormatizado, onde o acesso rpido inormaodesejada algo crucial, temos nas expresses regulares uma mo amiga, quequanto mais refnada or sua construo, mais preciso e rpido ser o resul-tado, dierenciando aqueles que as dominam daqueles que perdem horas

    procurando por dados que esto ao alcance da mo.O assunto algo bem peculiar, pois apesar de a maioria das linguagens de

    programao, programas e editores de texto mais utilizados possurem esserecurso, poucos o dominam, principalmente pelo ato de a documentaosobre o assunto, quando existente, ser enigmtica e pouco didtica, ou sim-plesmente se resumir a listagens, sem explicar os conceitos. Esta obra nasceudessa necessidade e tem como objetivo preencher essa lacuna, sendo umadocumentao completa e didtica para iniciantes, tipo tutorial, e um guiade reerncia para os j iniciados.

    Captulo 1Introduo

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    4/18

    Expresses Regulares18[ ]

    Este livro a primeira publicao em portugus totalmente dedicada aoassunto, e espero que esse pioneirismo traga muitos rutos, inclusive outraspublicaes sobre o tema, para diundir e desmistifcar o uso das expressesregulares.

    Sobre o livro

    A primeira parte o eijo com arroz, indicada queles que desconhecem ouainda no se sentem vontade para criar suas prprias expresses regulares.Faremos um tourpor todas as pecinhas que compem esse mundo antstico,

    explicando didaticamente, do zero, o que so, de onde vieram, para que serveme como utiliz-las (Exemplos! Exemplos!).

    Aps ler e entender essa primeira parte, algo como

    ^ *[A-Za-z0-9_]+:(.*)$

    vai azer parte de sua realidade, sem lhe causar pnico.

    A segunda parte a eijoada, para aqueles que querem uma experinciamais intensa. Mergulharemos de cabea e entenderemos de vez essa ma-quininha esquisita. So as explicaes dos conceitos envolvidos, bem comotticas e dicas para voc realmente entender e otimizar seu uso das expressesregulares. Ao fnal da leitura, voc entender por que

    ^[^:]+:([A-Za-z]+):

    melhor que

    .*:(.*):

    Mas note que, tudo isso, sem viajar muito nos detalhes intrnsecos e semconhecer os becos escuros que voc talvez nunca precisar saber que existem.Acima de tudo este um livro prtico. para ler e azer suas expresses. Issono o torna superfcial, apenas direto.

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    5/18

    Captulo 1 Introduo 19[ ]

    Com tudo isso, temos diversas tabelas e listagens que servem para ser con-sultadas rapidamente em caso de dvida ou esquecimento. Relaxe, no umbicho de [0-9]+ cabeas... Vamos bater um papo descontrado sobre o assunto.Ento respire undo, desligue a TV, olhe fxamente para estas letras e vamos!

    Apresentando as Expresses Regulares

    Ento, para podermos comear nossa viagem, nada como uma apresentaode nosso assunto, pois, afnal de contas, que raios so estas expresses?

    Bem resumido, uma expresso regular um mtodo ormal de se especi-fcar um padro de texto.

    Mais detalhadamente, uma composio de smbolos, caracteres comunes especiais, que, agrupados entre si e com caracteres literais, ormamuma sequncia, uma expresso. Essa expresso interpretada como uma regraque indicar sucesso se uma entrada de dados qualquer casar com essa regra,ou seja, obedecer exatamente a todas as suas condies.

    Ou como variaes aceitas tambm pode-se afrmar que :

    uma maneira de procurar um texto que voc no lembra exatamentecomo , mas tem ideia das variaes possveis;

    uma maneira de procurar um trecho em posies especfcas como nocomeo ou no fm de uma linha, ou palavra;

    uma maneira de um programador especifcar padres complexos quepodem ser procurados e casados em uma cadeia de caracteres;

    uma construo que utiliza pequenas erramentas, eita para obterdeterminada sequncia de caracteres de um texto.

    Ou ainda, didaticamente alando, :

    Como o brinquedo LEGO, vrias pecinhas dierentes, cada uma com suacaracterstica, que juntas compem estruturas completas e podem ser ar-ranjadas com infnitas combinaes dierentes.

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    6/18

    Expresses Regulares20[ ]

    Como um jogo de truco, com as cartas normais e as quentes: gato, copas,espadilha e mole, que so especiais e tm uma ordem de grandeza.

    Como um quebra-cabea, sempre tem soluo, s vezes bvia, s vezesdicil, mas, decirando as partes, junta-se tudo e chega-se ao todo.

    Como um jogo, no comeo dicil, mas aps conhecer todas as regras,basta jogar e curtir.

    Como uma receita culinria, com seus ingredientes e uma ordem corretapara adicion-los mistura.

    Como consertar carros. Voc tem vrias peas e vrias erramentas.Dependendo do tipo de pea, h uma erramenta certa para voc lidarcom ela. E dependendo da sua localizao, voc tem de incrementar aerramenta com mais barras e cotovelos para alcan-la.

    Como o alabeto. Voc aprende primeiro as letras individualmente.Depois as slabas, as palavras, as rases e fnalmente os textos. Mas noundo so apenas letras.

    Acima de tudo, assim como um sorvete no domingo ensolarado, umaexpresso regular :

    Divertida!

    Divertida? T louco?Todos aqueles smbolos

    estranhos...

    Calma... normal estranharmos ou atrepudiarmos aquilo que ainda noconhecemos ou no dominamos bem.

    Como diria o vov Simpson no meioda multido: Vamos destruir aquiloque no entendemos!.

    Ao fnal da leitura, fcar claro que asexpresses so apenas pequenos pedaci-

    nhos simples que agrupados ormam algo maior. O importante voc com-preender bem cada um individualmente, e depois apenas l-los em sequncia.Lembre-se do alabeto: so apenas letras...

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    7/18

    Captulo 1 Introduo 21[ ]

    Histria

    Vem c, mas de onde

    surgiram essas taisexpresses regulares,tem algo a ver comexpresses matemticas?

    Sim! Vou te contar uma histria. A ecundao dessas expresses aconteceu

    no ano de 1943, quando os pais, dois neurologistas, publicaram um estudoque teorizava o uncionamento dos nossos neurnios. Sentiu o drama? Nossoassunto nobre desde a sua origem.

    Anos depois, o parteiro, um matemtico, descreveu algebricamente osmodelos desse estudo utilizando smbolos para representar seus recm--criados grupos regulares (do ingls regular sets). Com a criao dessanotao simblica, nasceram as expresses regulares, que durante toda a

    sua inncia e juventude (cerca de vinte anos) oram muito estudadas pelosmatemticos da poca.

    Mas o encontro com o computador s aconteceu mesmo em 1968, emum algoritmo de busca utilizado no editor de textos qed, que depois virou oed, editor padro dos primeiros sistemas Unix. Este ed tinha o comando decontexto g, que aceitava expresses regulares e um comando p. Sua sintaxefcava g/RE/p (Global Regular Expression Print), que deu origem ao aplicativo

    grep, que por sua vez originou o egrep.Outros flhos como o sed e o awk tambm apareceram, cada um imple-

    mentando as expresses do seu prprio jeito; e fnalmente em 1986 oi criadoo divisor de guas, um pacote pioneiro em C chamado regex que tratava dasexpresses regulares e qualquer um poderia inclu-lo em seu prprio progra-ma, de graa. Opa! Falaram as palavras mgicas: de graa. A no teve maisvolta, as expresses caram no gosto popular e cada vez mais e mais programase linguagens as utilizam.

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    8/18

    Expresses Regulares22[ ]

    Curiosidade: apesar de esse assunto ser antigo, o que vamos ver aqui ba-sicamente o mesmo que um estudante veria 25 anos atrs. um conceitoconsistente, que no sore alteraes com o passar do tempo.

    Terminologia

    E se eu te disser que ERs so metacaracteres que casam um padro? Noentendeu?

    Bem, como expresses regulares um termo muito extenso, daqui em

    diante, chamarei apenas de ER (-rre) para simplifcar a leitura. Outrasnomenclaturas que podem ser encontradas em outras ontes so expreg,regexp, regex e RE. Particularmente, regex uma boa escolha para usar emerramentas de busca na Internet.

    E como estamos alando de termos, tem mais alguns novos que aro partede nossa conversa. Lembra que as expresses so ormadas por smbolos ecaracteres literais? Esses smbolos so chamados de metacaracteres, poispossuem unes especiais, que veremos detalhadamente adiante.

    Outro termo que interessante e s vezes pode assustar um leitor meiodistrado o casar (match). Casamento aqui no juntar os trapos, mas,sim, o ato de bater, conerir, combinar, igualar, encontrar, encaixar, equiparar. como em um caixa 24 horas, em que voc s retirar o dinheiro se sua senhadigitada casar com aquela j cadastrada no banco.

    Tambm temos o padro (pattern), que nosso objetivo quando azemos

    uma ER: casar um padro. Esse padro pode ser uma palavra, vrias, umalinha vazia, um nmero, ou seja, o que quer que precise ser encontrado pelanossa ER.

    E ainda tem o robozinho, que uma reerncia ao compilador e interpretadordas expresses regulares, o cdigo que vai ler, checar, entender e aplicar sua ER notexto desejado. Como exemplo, para programas em C o robozinho a bibliotecaregex, que az todo o servio.

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    9/18

    Captulo 1 Introduo 23[ ]

    Para que servem?

    Basicamente servem para voc dizer algo abrangente de orma especfca. Def-

    nido seu padro de busca, voc tem uma lista (fnita ou no) de possibilidadesde casamento. Em um exemplo rpido, [rgp]ato pode casar rato, gato e pato.Ou seja, sua lista abrange especifcamente essas trs palavras, nada mais.

    Na prtica, as expressesregulares servem para uma infnidade

    de tareas, dicil azer uma lista, pois elas soteis sempre que voc precisar buscar ou validarum padro de texto que pode ser varivel, como:

    data

    horrio

    nmero IP

    nome de pessoa endereo de e-mail

    endereo de Internet

    nome de usurio e senha

    declarao de uma uno()

    dados na coluna N de um texto

    dados que esto entre

    campos especfcos de um texto tabulado

    nmero de teleone, RG, CPF, carto de crdito

    dados que esto apenas no comeo ou no fm da linha

    E mais uma infnidade de outros padres que no podem ser especifcados

    com caracteres literais.

    Mmmm

    mmmmmmmmmmm...

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    10/18

    Expresses Regulares24[ ]

    Um exemplo prtico: voc tem uma lista diria de acesso de usurios queentraram em seu sistema, onde consta, em cada linha, o horrio do acesso eo login do usurio, algo como:

    05:15 ernesto

    08:39 ricardo

    10:32 patricia

    14:59 gabriel

    16:27 carla

    22:23 marcelo

    Como azer para buscar automaticamente apenas os usurios que acessa-ram o sistema no perodo da tarde (meio-dia s seis)? Voc tem vrias opes,desde procurar uma a uma manualmente at azer um programa que compareos primeiros caracteres de cada linha, mas, alando de algo prtico e rpido,que no exija conhecimentos de programao, a ER simplesmente ^1[2-8].

    1

    ^

    O que significa essasopa de letrinhas?

    Caaaaaaalma. Acompanhe o prximo tpico e vamos conhecer todos os

    metacaracteres, essas coisinhas teis que acilitam nossa vida.

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    11/18

    25[ ]

    ?

    $

    {} *.

    ^

    []

    Ento, para j matar sua curiosidade, aqui esto os to alados metacaracteres-padro que sero nossos personagens das prximas pginas:

    . ? * + ^ $ | [ ] { } ( ) \

    E a, sentiu um rio na barriga? Cada simbolozinho desses tem sua unoespecfca, que pode mudar dependendo do contexto no qual est inserido, e

    podemos agreg-los uns com os outros, combinando suas unes e azendoconstrues mais complexas. Olha, ainda d tempo de echar o livro e voltara assistir novela...

    Ento deixe eu te assustar mais um pouquinho. Alm destes, temos outrosmetacaracteres estendidos que oram criados posteriormente, pois tareas maiscomplexas requisitavam unes mais especfcas ainda. E para terminar decomplicar, sua sintaxe de utilizao no a mesma para todos os programas

    que suportam expresses regulares.Bem, j que voc no desistiu (eu tentei), vamos logo ao que interessa, e

    para comear vamos dar nomes aos bois. Leia, releia e treleia esta lista, repetin-do para si mesmo e associando o nome ao smbolo, pois estas palavras aroparte de sua vida, de sua rotina. Acostume-se com os nomes e no os mude.

    Captulo 2Os metacaracteres

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    12/18

    Expresses Regulares26[ ]

    Metacaractere Nome Metacaractere Nome

    . Ponto ^ Circunexo

    [] Lista $ Cifro

    [^] Lista negada \b Borda

    ? Opcional \ Escape

    * Asterisco | Ou

    + Mais () Grupo

    {} Chaves \1 Retrovisor

    Agora que sabemos como chamar nossos amigos novos, veremos umaprvia, um apanhado geral de todos os metacaracteres e suas unes. Elesesto divididos em quatro grupos distintos, de acordo com caractersticascomuns entre eles.

    Representantes

    Metacaractere Nome Funo

    . Ponto Um caractere qualquer[...] Lista Lista de caracteres permitidos

    [^...] Lista negada Lista de caracteres proibidos

    Quantifcadores

    Metacaractere Nome Funo

    ? Opcional Zero ou um

    * Asterisco Zero, um ou mais

    + Mais Um ou mais

    {n,m} Chaves De n at m

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    13/18

    Captulo 2 Os metacaracteres 27[ ]

    ncoras

    Metacaractere Nome Funo

    ^ Circunexo Incio da linha

    $ Cifro Fim da linha

    \b Borda Incio ou fm de palavra

    Outros

    Metacaractere Nome Funo

    \c

    Escape Torna literal o caracterec

    | Ou Ou um ou outro

    (...) Grupo Delimita um grupo

    \1...\9 Retrovisor Texto casado nos grupos 1...9

    Aaaaah, ento

    ? e * eu j uso nalinha de comando!

    Opa, no conunda! Os curingasusados na linha de comando para

    especiicar nomes de arquivos,como *.txt,relatorio.{txt,doc} efoto-??.html no so expresses

    regulares. So curingas especfcosde nomes de arquivo, e, apesar de pa-

    recidos, so outra coisa e os signifcados deseus smbolos so dierentes dos das expresses. Ento o

    melhor que voc az agora esquecer esses curingas, seno eles podem conun-

    di-lo e atrapalhar seu aprendizado.Ah, antes que eu me esquea: para testar os exemplos que veremos a seguir,

    acesse o site do livro: www.piazinho.com.br. H uma erramenta especial paravoc testar todos os exemplos, alm de poder azer suas prprias expresses.Experimente!

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    14/18

    Expresses Regulares28[ ]

    Metacaracteres tipo Representante

    O primeiro grupo de metacaracteres que veremos so os do tipo representante,

    ou seja, so metacaracteres cuja uno representar um ou mais caracteres.

    Tambm podem ser encarados como apelidos, links ou qualquer outracoisa que lhe lembre essa associao entre elementos. Todos os metacaracteresdesse tipo casam a posio de um nico caractere, e no mais que um.

    Ponto: o necessitado .

    O ponto nosso curinga solitrio, que est sempre procura de um casamento,no importa com quem seja. Pode ser um nmero, uma letra, um Tab, um @,o que vier ele traa, pois o ponto casa qualquer coisa.

    Suponhamos uma ER que contenha os caracteres ala e o metacaractere pon-to, assim: "fala.". No texto a seguir, essa ER casaria tudo o que est sublinhado:

    Olha, com vocs me pressionando, a ala no vai sair natural. Euno consigo me concentrar na minha ala. Alis, isso um alatrio,

    pois nunca vi um comercial com tantas alas assim. Vou me queixarcom o [email protected].

    Nesse pequeno trecho de texto, nossa ER casou cinco vezes, tendo o pontocasado com os seguintes caracteres: .ts@.

    ATENO: O metacaractere pontocasa, entre outros, o caractere ponto.

    Como exemplos de uso do ponto, em um texto normal em portugus,voc pode procurar palavras que voc no se lembra se acentuou ou no,que podem comear com maisculas ou no ou que oram escritas errado:

    Expresso Casa com

    n.o no, nao, ...

    .eclado teclado, Teclado, ...

    e.tendido estendido, extendido, eztendido, ...

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    15/18

    Captulo 2 Os metacaracteres 29[ ]

    Ou, para tareas mais especfcas, procurar horrio com qualquer separadorou com marcaes (tags) HTML:

    Expresso Casa com

    12.45 12:45, 12 45, 12.45, ...

    , ,

    , ...

    O ponto casa com qualquer coisa.

    O ponto casa com o ponto.

    O ponto um curinga para casar um caractere.

    Lista: a exigente [...]

    Bem mais exigente que o ponto, a lista no casa com qualquer um. Ela sabeexatamente o que quer, e no aceita nada dierente daquilo, a lista casa comquem ela conhece.

    Ela guarda dentro de si os caracteres permitidos para casar, ento algocomo [aeiou] limita nosso casamento a letras vogais.

    No exemplo anterior do ponto, sobre acentuao, tnhamos a ERn.o. Alm

    dos casamentos desejados, ela muito abrangente, e tambm casa coisasindesejveis como neo, n-o, n5o e n o.

    Para que nossa ER fque mais especfca, trocamos o ponto pela lista, paracasar apenas no e nao, veja:

    n[a]o

    E, assim como o n.o, todos os outros exemplos anteriores do ponto casammuito mais que o desejado, justo pela sua natureza promscua.

    Resumo

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    16/18

    Expresses Regulares30[ ]

    Por isso que nosexemplos tinha os

    trs pontinhosno final?

    Exatamente, eles indicam que havia mais possibilidades de casamento.Como o ponto casa com qualquer coisa, ele nada especfco. Ento vamosimpor limites s ERs:

    Expresso Casa com

    n[a]o no, nao

    [Tt]eclado Teclado, teclado

    e[sx]tendido estendido, extendido

    12[:. ]45 12:45, 12.45, 12 45

    , ,

    Mas e aquele pontona ER da hora,no casa com

    qualquer coisa?

    Pegadinha! No. Registre em algum canto de seu crebro: dentro da lista,todo mundo normal. Repetindo: dentro da lista, todo mundo normal. En-to aquele ponto simplesmente um ponto normal, e no um metacaractere.

    No exemplo de marcao , vemos que as ERs so sensveis a mais-culas e minsculas, ento, se quisermos mais possibilidades, basta inclu-las:

    Expresso Casa com

    , ,

    , , ,

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    17/18

    Captulo 2 Os metacaracteres 31[ ]

    Intervalos em listas

    Por enquanto, vimos que a lista abriga todos os caracteres permitidos em

    uma posio. Como seria uma lista que dissesse que em uma determinadaposio poderia haver apenas nmeros?

    Pera que essa eu sei... deixa ver...

    [0123456789]. Acertei?

    Sim! Ento, para casar uma hora, qualquer que ela seja, fca como? Lembreque o ormato hh:mm.

    T. [0123456789][0123456789]:[0123 Argh! QUE SACO!

    Pois ! Assim tambm pensaram nossos ilustres criadores das ERs, e,para evitar esse tipo de listagem extensa, dentro da lista temos o conceito

    de intervalo.Lembra que eu disse para voc memorizar que dentro da lista, todo mundo

    normal? Pois , aqui temos a primeira exceo regra. Todo mundo, orao trao. Se tivermos um trao (-) entre dois caracteres, isso representa todo ointervalo entre eles.

    No entendeu? assim, olhe:

    [0123456789] igual a [0-9]

    simples assim. Aquele tracinho indica um intervalo, ento 0-9 se l: dezero a nove.

  • 8/22/2019 expresses-regulares-capitulo1-2.pdf

    18/18

    Expresses Regulares32[ ]

    Voltando a nossa ER da hora, poderamos azer

    [0-9][0-9]:[0-9][0-9]

    mas veja que no especfco o bastante, pois permite uma hora como99:99, que no existe. Como poderamos azer uma ER que casasse no m-ximo 23 horas e 59 minutos?

    C

    alm

    al...[

    012][0-9]:[0-5][0-9]

    Quase, s que tpegando 29 horas...

    Excelente! Com o que aprendemos at agora, esse o mximo de precisoque conseguimos. Mais adiante, quem poder nos ajudar ser o ou. Depois

    voltamos a esse problema.

    Esse intervalo funcionas para nmeros? Algo como

    a-z tambm existe?

    Era isso que eu ia alar agora. Sim, qualquer intervalo vlido, como a-z,A-Z, 5-9, a-f, :-@ etc.

    De : at @?

    ?