Você está na página 1de 18

4 Edio Revisada e Ampliada

Aurelio Marinho Jargas

Novatec

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 Prates
Reviso de textos: Marta Almeida de S
Capa, projeto grfico e editorao eletrnica: Karine Hermes
Adaptao do projeto grfico: Carolina Kuwabata
Ilustrao da capa: Vinicius Vogel
ISBN: 978-85-7522-337-6
Histrico de impresses:
Outubro/2012
Junho/2011
Setembro/2009
Julho/2008
Novembro/2006

Quarta edio (ISBN: 978-85-7522-337-6)


Primeira reimpresso
Terceira edio (ISBN: 978-85-7522-212-6)
Segunda edio (ISBN: 978-85-7522-173-0)
Primeira edio (ISBN: 85-7522-100-0)

Novatec Editora Ltda.


Rua Lus Antnio dos Santos 110
02460-000 So Paulo, SP Brasil
Tel.: +55 11 2959-6529
Fax: +55 11 2950-8869
E-mail: novatec@novatec.com.br
Site: www.novatec.com.br
Twitter: twitter.com/novateceditora
Facebook: facebook.com/novatec
LinkedIn: linkedin.com/in/novatec

Dados

Internacionais de Catalogao na Publicao


(Cmara Brasileira do Livro, SP, Brasil)
Jargas, Aurlio Marinho
Expresses 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 computao
005.115

VC20121022

(CIP)

Captulo 1
Introduo

Ol. Que tal esquecer um pouco a rotina e a realidade e fazer uma viagem
ao interior de sua mente? Descobrir conceitos novos, diferentes. Ao voltar,
as coisas no sero mais to normais quanto antes, pois smbolos estranhos
faro parte de seu dia a dia.
Inspirado pelo funcionamento de seus prprios neurnios, descubra o
fascinante mundo abstrato das expresses regulares.

Objetivo
Neste nosso mundo tecnoinformatizado, onde o acesso rpido informao
desejada algo crucial, temos nas expresses regulares uma mo amiga, que
quanto mais refinada for sua construo, mais preciso e rpido ser o resultado, diferenciando 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 esse
recurso, poucos o dominam, principalmente pelo fato de a documentao
sobre o assunto, quando existente, ser enigmtica e pouco didtica, ou simplesmente se resumir a listagens, sem explicar os conceitos. Esta obra nasceu
dessa necessidade e tem como objetivo preencher essa lacuna, sendo uma
documentao completa e didtica para iniciantes, tipo tutorial, e um guia
de referncia para os j iniciados.

17

18

Expresses Regulares

Este livro a primeira publicao em portugus totalmente dedicada ao


assunto, e espero que esse pioneirismo traga muitos frutos, inclusive outras
publicaes sobre o tema, para difundir e desmistificar o uso das expresses
regulares.

Sobre o livro
A primeira parte o feijo com arroz, indicada queles que desconhecem ou
ainda no se sentem vontade para criar suas prprias expresses regulares.
Faremos um tour por todas as pecinhas que compem esse mundo fantstico,
explicando didaticamente, do zero, o que so, de onde vieram, para que servem
e como utiliz-las (Exemplos! Exemplos!).
Aps ler e entender essa primeira parte, algo como
^ *[A-Za-z0-9_]+:(.*)$

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


A segunda parte a feijoada, para aqueles que querem uma experincia
mais intensa. Mergulharemos de cabea e entenderemos de vez essa maquininha esquisita. So as explicaes dos conceitos envolvidos, bem como
tticas e dicas para voc realmente entender e otimizar seu uso das expresses
regulares. Ao final da leitura, voc entender por que
^[^:]+:([A-Za-z]+):

melhor que
.*:(.*):

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

Captulo 1 Introduo

19

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

Apresentando as Expresses Regulares


Ento, para podermos comear nossa viagem, nada como uma apresentao
de nosso assunto, pois, afinal de contas, que raios so estas expresses?
Bem resumido, uma expresso regular um mtodo formal de se especificar um padro de texto.
Mais detalhadamente, uma composio de smbolos, caracteres com
funes especiais, que, agrupados entre si e com caracteres literais, formam
uma sequncia, uma expresso. Essa expresso interpretada como uma regra
que 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 afirmar que :
uma maneira de procurar um texto que voc no lembra exatamente
como , mas tem ideia das variaes possveis;
uma maneira de procurar um trecho em posies especficas como no
comeo ou no fim de uma linha, ou palavra;
uma maneira de um programador especificar padres complexos que
podem ser procurados e casados em uma cadeia de caracteres;
uma construo que utiliza pequenas ferramentas, feita para obter
determinada sequncia de caracteres de um texto.
Ou ainda, didaticamente falando, :
Como o brinquedo LEGO, vrias pecinhas diferentes, cada uma com sua
caracterstica, que juntas compem estruturas completas e podem ser arranjadas com infinitas combinaes diferentes.

20

Expresses Regulares

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 vezes
difcil, mas, decifrando as partes, junta-se tudo e chega-se ao todo.
Como um jogo, no comeo difcil, mas aps conhecer todas as regras,
basta jogar e curtir.
Como uma receita culinria, com seus ingredientes e uma ordem correta
para adicion-los mistura.
Como consertar carros. Voc tem vrias peas e vrias ferramentas.
Dependendo do tipo de pea, h uma ferramenta certa para voc lidar
com ela. E dependendo da sua localizao, voc tem de incrementar a
ferramenta com mais barras e cotovelos para alcan-la.
Como o alfabeto. Voc aprende primeiro as letras individualmente.
Depois as slabas, as palavras, as frases e finalmente os textos. Mas no
fundo so apenas letras.
Acima de tudo, assim como um sorvete no domingo ensolarado, uma
expresso regular :
Divertida!

Divertida? T louco?
Todos aqueles smbolos
estranhos...

Calma... normal estranharmos ou at


repudiarmos aquilo que ainda no
conhecemos ou no dominamos bem.
Como diria o vov Simpson no meio
da multido: Vamos destruir aquilo
que no entendemos!.

Ao final da leitura, ficar claro que as


expresses so apenas pequenos pedacinhos simples que agrupados formam algo maior. O importante voc compreender bem cada um individualmente, e depois apenas l-los em sequncia.
Lembre-se do alfabeto: so apenas letras...

Captulo 1 Introduo

21

Histria
Vem c, mas de onde
surgiram essas tais
expresses regulares,
tem algo a ver com
expresses matemticas?

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


no ano de 1943, quando os pais, dois neurologistas, publicaram um estudo
que teorizava o funcionamento dos nossos neurnios. Sentiu o drama? Nosso
assunto nobre desde a sua origem.
Anos depois, o parteiro, um matemtico, descreveu algebricamente os
modelos desse estudo utilizando smbolos para representar seus recm-criados grupos regulares (do ingls regular sets). Com a criao dessa
notao simblica, nasceram as expresses regulares, que durante toda a
sua infncia e juventude (cerca de vinte anos) foram muito estudadas pelos
matemticos da poca.
Mas o encontro com o computador s aconteceu mesmo em 1968, em
um algoritmo de busca utilizado no editor de textos qed, que depois virou o
ed, editor padro dos primeiros sistemas Unix. Este ed tinha o comando de
contexto g, que aceitava expresses regulares e um comando p. Sua sintaxe
ficava g/RE/p (Global Regular Expression Print), que deu origem ao aplicativo
grep, que por sua vez originou o egrep.
Outros filhos como o sed e o awk tambm apareceram, cada um implementando as expresses do seu prprio jeito; e finalmente em 1986 foi criado
o divisor de guas, um pacote pioneiro em C chamado regex que tratava das
expresses regulares e qualquer um poderia inclu-lo em seu prprio programa, de graa. Opa! Falaram as palavras mgicas: de graa. A no teve mais
volta, as expresses caram no gosto popular e cada vez mais e mais programas
e linguagens as utilizam.

22

Expresses Regulares

Curiosidade: apesar de esse assunto ser antigo, o que vamos ver aqui basicamente o mesmo que um estudante veria 25 anos atrs. um conceito
consistente, que no sofre alteraes com o passar do tempo.

Terminologia
E se eu te disser que ERs so metacaracteres que casam um padro? No
entendeu?
Bem, como expresses regulares um termo muito extenso, daqui em
diante, chamarei apenas de ER (-rre) para simplificar a leitura. Outras
nomenclaturas que podem ser encontradas em outras fontes so expreg,
regexp, regex e RE. Particularmente, regex uma boa escolha para usar em
ferramentas de busca na Internet.
E como estamos falando de termos, tem mais alguns novos que faro parte
de nossa conversa. Lembra que as expresses so formadas por smbolos e
caracteres literais? Esses smbolos so chamados de metacaracteres, pois
possuem funes especiais, que veremos detalhadamente adiante.
Outro termo que interessante e s vezes pode assustar um leitor meio
distrado o casar (match). Casamento aqui no juntar os trapos, mas,
sim, o ato de bater, conferir, combinar, igualar, encontrar, encaixar, equiparar.
como em um caixa 24 horas, em que voc s retirar o dinheiro se sua senha
digitada casar com aquela j cadastrada no banco.
Tambm temos o padro (pattern), que nosso objetivo quando fazemos
uma ER: casar um padro. Esse padro pode ser uma palavra, vrias, uma
linha vazia, um nmero, ou seja, o que quer que precise ser encontrado pela
nossa ER.
E ainda tem o robozinho, que uma referncia ao compilador e interpretador
das expresses regulares, o cdigo que vai ler, checar, entender e aplicar sua ER no
texto desejado. Como exemplo, para programas em C o robozinho a biblioteca
regex, que faz todo o servio.

Captulo 1 Introduo

23

Para que servem?


Basicamente servem para voc dizer algo abrangente de forma especfica. Definido seu padro de busca, voc tem uma lista (finita ou no) de possibilidades
de casamento. Em um exemplo rpido, [rgp]ato pode casar rato, gato e pato.
Ou seja, sua lista abrange especificamente essas trs palavras, nada mais.

Mmmmm

mmmmmm

Na prtica, as expresses
regulares servem para uma infinidade
de tarefas, difcil fazer uma lista, pois elas so
teis sempre que voc precisar buscar ou validar
um padro de texto que pode ser varivel, como:

mmmm...

data
horrio
nmero IP
nome de pessoa
endereo de e-mail
endereo de Internet
nome de usurio e senha
declarao de uma funo()
dados na coluna N de um texto
dados que esto entre <tags></tags>
campos especficos de um texto tabulado
nmero de telefone, RG, CPF, carto de crdito
dados que esto apenas no comeo ou no fim da linha
E mais uma infinidade de outros padres que no podem ser especificados
com caracteres literais.

24

Expresses Regulares

Um exemplo prtico: voc tem uma lista diria de acesso de usurios que
entraram em seu sistema, onde consta, em cada linha, o horrio do acesso e
o login do usurio, algo como:
05:15

ernesto

10:32

patricia

08:39
14:59
16:27
22:23

ricardo
gabriel
carla

marcelo

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

O que significa essa


sopa de letrinhas?

^
1

Caaaaaaalma. Acompanhe o prximo tpico e vamos conhecer todos os


metacaracteres, essas coisinhas teis que facilitam nossa vida.

Captulo 2

. $ *
{}

[]

Os metacaracteres

Ento, para j matar sua curiosidade, aqui esto os to falados metacaracterespadro que sero nossos personagens das prximas pginas:
. ? * + ^ $ | [ ] { } ( ) \

E a, sentiu um frio na barriga? Cada simbolozinho desses tem sua funo


especfica, que pode mudar dependendo do contexto no qual est inserido, e
podemos agreg-los uns com os outros, combinando suas funes e fazendo
construes mais complexas. Olha, ainda d tempo de fechar o livro e voltar
a assistir novela...
Ento deixe eu te assustar mais um pouquinho. Alm destes, temos outros
metacaracteres estendidos que foram criados posteriormente, pois tarefas mais
complexas requisitavam funes mais especficas ainda. E para terminar de
complicar, 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, repetindo para si mesmo e associando o nome ao smbolo, pois estas palavras faro
parte de sua vida, de sua rotina. Acostume-se com os nomes e no os mude.

25

26

Expresses Regulares
Metacaractere
.

Nome

Ponto

[]
?

Lista negada
Opcional

Asterisco

{}

Cifro

\b

Borda

Escape

Ou

()

Mais
Chaves

Nome
Circunflexo

Lista

[^]

Metacaractere

Grupo

\1

Retrovisor

Agora que sabemos como chamar nossos amigos novos, veremos uma
prvia, um apanhado geral de todos os metacaracteres e suas funes. Eles
esto divididos em quatro grupos distintos, de acordo com caractersticas
comuns entre eles.

Representantes
Metacaractere

Nome

Funo

Ponto

Um caractere qualquer

[...]

Lista

Lista de caracteres permitidos

Lista negada

Lista de caracteres proibidos

[^...]

Quantificadores
Metacaractere
?
*
+

{n,m}

Nome

Funo

Opcional

Zero ou um

Asterisco

Zero, um ou mais

Mais

Um ou mais

Chaves

De n at m

Captulo 2 Os metacaracteres

27

ncoras
Metacaractere
^
$

\b

Nome

Funo

Circunflexo

Incio da linha

Cifro

Fim da linha

Borda

Incio ou fim de palavra

Outros
Metacaractere
\c
|

(...)

\1...\9

Nome

Funo

Escape

Torna literal o caractere c

Ou

Ou um ou outro

Grupo

Delimita um grupo

Retrovisor

Texto casado nos grupos 1...9

Opa, no confunda! Os curingas


usados na linha de comando para
Aaaaah, ento
especificar nomes de arquivos,
? e * eu j uso na
como *.txt, relatorio.{txt,doc} e
foto-??.html no so expresses
linha de comando!
regulares. So curingas especficos
de nomes de arquivo, e, apesar de parecidos, so outra coisa e os significados de
seus smbolos so diferentes dos das expresses. Ento o
melhor que voc faz agora esquecer esses curingas, seno eles podem confundi-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 ferramenta especial para
voc testar todos os exemplos, alm de poder fazer suas prprias expresses.
Experimente!

28

Expresses Regulares

Metacaracteres tipo Representante


O primeiro grupo de metacaracteres que veremos so os do tipo representante,
ou seja, so metacaracteres cuja funo representar um ou mais caracteres.
Tambm podem ser encarados como apelidos, links ou qualquer outra
coisa que lhe lembre essa associao entre elementos. Todos os metacaracteres
desse 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 fala e o metacaractere ponto, assim: "fala.". No texto a seguir, essa ER casaria tudo o que est sublinhado:
Olha, com vocs me pressionando, a fala no vai sair natural. Eu
no consigo me concentrar na minha fala. Alis, isso um falatrio,
pois nunca vi um comercial com tantas falas assim. Vou me queixar
com o problemasnafala@medicos.com.br.

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

ATENO: O metacaractere ponto


casa, 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 foram escritas errado:
Expresso
n.o

.eclado

e.tendido

Casa com
no, nao, ...
teclado, Teclado, ...
estendido, extendido, eztendido, ...

Captulo 2 Os metacaracteres

29

Ou, para tarefas mais especficas, procurar horrio com qualquer separador
ou com marcaes (tags) HTML:
Expresso
12.45
<.>

Casa com
12:45, 12 45, 12.45, ...
<B>, <i>, <p>, ...

Resumo
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 sabe
exatamente o que quer, e no aceita nada diferente daquilo, a lista casa com
quem ela conhece.
Ela guarda dentro de si os caracteres permitidos para casar, ento algo
como [aeiou] limita nosso casamento a letras vogais.
No exemplo anterior do ponto, sobre acentuao, tnhamos a ER n.o. Alm
dos casamentos desejados, ela muito abrangente, e tambm casa coisas
indesejveis como neo, n-o, n5o e n o.
Para que nossa ER fique mais especfica, trocamos o ponto pela lista, para
casar apenas no e nao, veja:
n[a]o

E, assim como o n.o, todos os outros exemplos anteriores do ponto casam


muito mais que o desejado, justo pela sua natureza promscua.

30

Expresses Regulares

Por isso que nos


exemplos tinha os
trs pontinhos
no final?

Exatamente, eles indicam que havia mais possibilidades de casamento.


Como o ponto casa com qualquer coisa, ele nada especfico. Ento vamos
impor limites s ERs:
Expresso
n[a]o

[Tt]eclado

e[sx]tendido
12[:. ]45
<[BIP]>

Casa com
no, nao
Teclado, teclado
estendido, extendido
12:45, 12.45, 12 45
<B>, <I>, <P>

Mas e aquele ponto


na 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. Ento aquele ponto simplesmente um ponto normal, e no um metacaractere.
No exemplo de marcao <[BIP]>, vemos que as ERs so sensveis a maisculas e minsculas, ento, se quisermos mais possibilidades, basta inclu-las:
Expresso
<[BIPbip]>

Casa com
<B>, <I>, <P>, <b>, <i>, <p>

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 determinada
posio poderia haver apenas nmeros?

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


[0123456789]. Acertei?

Sim! Ento, para casar uma hora, qualquer que ela seja, fica como? Lembre
que o formato 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, fora
o trao. Se tivermos um trao (-) entre dois caracteres, isso representa todo o
intervalo entre eles.
No entendeu? assim, olhe:
[0123456789] igual a [0-9]

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


zero a nove.

32

Expresses Regulares

Voltando a nossa ER da hora, poderamos fazer


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

mas veja que no especfico o bastante, pois permite uma hora como
99:99, que no existe. Como poderamos fazer uma ER que casasse no mximo 23 horas e 59 minutos?

[0-9]:[0-5][0-9]
Quase, s que t
pegando 29 horas...

Calm
a

12]
.. [0

Excelente! Com o que aprendemos at agora, esse o mximo de preciso


que conseguimos. Mais adiante, quem poder nos ajudar ser o ou. Depois
voltamos a esse problema.

Esse intervalo funciona


s para nmeros? Algo como
a-z tambm existe?
Era isso que eu ia falar agora. Sim, qualquer intervalo vlido, como a-z,
A-Z, 5-9, a-f, :-@ etc.

De : at @?

Você também pode gostar