Você está na página 1de 27

Expresses Regulares

Cookbook

Jan Goyvaerts
Steven Levithan

Novatec
Authorized Portuguese translation of the English edition of Regular Expressions Cookbook ISBN 9780596520687
2009, Jan Goyvaerts and Steve Levithan. This translation is published and sold by permission of O'Reilly
Media, Inc., the owner of all rights to publish and sell the same.

Traduo em portugus autorizada da edio em ingls da obra Regular Expressions Cookbook ISBN
9780596520687 2009, Jan Goyvaerts e Steve Levithan. Esta traduo publicada e vendida com a permisso
da O'Reilly Media, Inc., detentora de todos os direitos para publicao e venda desta obra.

Novatec Editora Ltda. 2011.


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


Traduo: Rafael Contatori e Edgard Damiani
Reviso gramatical: Jeferson Ferreira
Editorao eletrnica: Camila Kuwabata e Carolina Kuwabata

ISBN: 978-85-7522-279-9

Histrico de impresses:
Abril/2011 Primeira edio

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 (CIP)


(Cmara Brasileira do Livro, SP, Brasil)

Goyvaerts, Jan
Expresses regulares Cookbook / Jan Goyvaerts,
Steven Levithan ; [traduo Rafael Contatori
/ Edgard Damiani]. -- So Paulo : Novatec Editora ;
Cambridge : O`Reilly Media, 2011.

Ttulo original: Regular expressions Cookbook.


ISBN 978-85-7522-279-9

1. Cookbook (Linguagem de programao)


2. Expresses regulares I. Levithan, Steven.
II. Ttulo.

10-08695 CDD-005.115

ndices para catlogo sistemtico:

1. Expresses regulares Cookbook : Cincia da


computao 005.115
OGF20110406
captulo 1
Introduo s expresses regulares

Ao abrir este livro de receitas, voc provavelmente ficar ansioso para inserir direta-
mente em seu cdigo as deselegantes strings de parnteses e pontos de interrogao
que encontrar nos prximos captulos. Se estiver pronto para comear, fique von-
tade: as expresses regulares prticas esto listadas e descritas nos captulos 4 a 8.
Porm, os captulos iniciais deste livro iro economizar muito tempo a longo prazo.
Por exemplo, este captulo introduz uma srie de utilitrios alguns deles criados
por um dos autores, Jan que permitem testar e depurar uma expresso regular antes
de embuti-la no cdigo, onde os erros ficam mais difceis de serem achados. Estes
captulos iniciais tambm mostram como utilizar as vrias caractersticas e opes das
expresses regulares para facilitar sua vida, ajudam a entender as expresses regulares,
a fim de melhorar sua performance, e ensinam as diferenas sutis de tratamento das
expresses regulares pelas diferentes linguagens de programao e at mesmo pelas
diferentes verses de sua linguagem favorita.
Dedicamos muitos esforos para estas questes de bastidores, confiantes de que voc
as ler antes de comear a trabalhar, ou quando se sentir frustrado com a utilizao
de expresses regulares e, por isso, desejar reforar seu nvel de compreenso.

Definio de expresses regulares


No contexto deste livro, uma expresso regular um tipo especfico de texto-padro
que voc pode utilizar em muitos aplicativos modernos e em linguagens de progra-
mao. Voc pode us-las para verificar se a entrada de dados encaixa-se no padro
de texto, para encontrar um texto que corresponda a um padro dentro de um con-
junto maior de textos, para substituir o texto padro por outro ou reorganizar bits
de texto correspondentes, para dividir um bloco de texto em uma lista de subtextos
e para dar um tiro no p. Este livro o ajudar a entender exatamente o que voc est
fazendo, evitando, assim, desastres.

15
16 Expresses Regulares Cookbook

Histria do termo Expresso Regular


O termo expresso regular vem da matemtica e da teoria da cincia da computao.
Ele reflete uma peculiaridade das expresses matemticas, chamada regularidade.
Essa expresso pode ser implementada em programas usando um autmato finito
determinstico (DFA). Um DFA uma mquina de estados finitos que no usa re-
trocesso (backtracking).
Os padres de texto utilizados pelas primeiras ferramentas grep (Global Regular
Expression and Print) eram expresses regulares no sentido matemtico. Embora o
nome tenha pegado, as expresses regulares modernas, no estilo Perl, no so expres-
ses regulares no sentido matemtico. Elas so implementadas com um autmato
finito no determinstico (NFA). Voc aprender tudo sobre retrocesso em breve. Tudo
de que um programador prtico precisa se lembrar que alguns cientistas elitistas
irritam-se com sua bem definida terminologia sendo sobrecarregada com usos e
noes inerentes tecnologia, que muito mais til no mundo real.

Se voc utilizar expresses regulares com habilidade, elas podem simplificar muitas
tarefas de programao e processamento de texto, alm de permitir outras que no
seriam possveis sem elas. Voc precisaria de dezenas, se no centenas de linhas de
cdigo procedural para extrair todos os endereos de e-mail de um documento
cdigo tedioso de escrever e difcil de manter. Mas, com a expresso regular correta,
como mostrado na receita 4.1, so necessrias apenas algumas linhas de cdigo, ou
talvez at uma nica linha.
Porm, se voc tentar fazer muita coisa com apenas uma expresso regular, ou utilizar
expresses regulares onde no for realmente necessrio, ir descobrir o sentido da
seguinte citao1:
Algumas pessoas, quando confrontadas com um problema, pensam: J sei, vou
utilizar expresses regulares. Agora, elas tm dois problemas.
O segundo problema destas pessoas o fato de no terem lido o manual do proprie-
trio; este mesmo que voc est segurando. Leia-o agora. A expresso regular uma
ferramenta poderosa. Se seu trabalho envolve manipulao ou extrao de texto em um
computador, o domnio das expresses regulares ir lhe poupar muitas horas de esforo.

Muitos sabores de expresses regulares


Tudo bem, o ttulo da seo anterior era uma mentira. Ns no definimos o que so
expresses regulares. No podemos. No existe nenhuma norma oficial que defina
1 Jeffrey Friedl narra a histria desta citao em seu blog em http://regex.info/blog/2006-09-15/247.
Captulo 1 Introduo s expresses regulares 17

exatamente quais padres de texto so expresses regulares e quais no so. Como


voc pode imaginar, cada programador de linguagens e cada desenvolvedor de apli-
caes de processamento de texto tem uma ideia diferente do que, exatamente, uma
expresso regular deva ser. Por isso, agora estamos amarrados a um leque enorme de
sabores de expresses regulares.
Felizmente, a maioria dos designers e programadores preguiosa. Por que criar algo
totalmente novo, quando voc pode copiar o que j foi feito? Como resultado, todos
os sabores modernos de expresses regulares, incluindo os discutidos neste livro, po-
dem traar sua histria a partir da linguagem de programao Perl. Chamamos esses
sabores de expresses regulares no estilo Perl. A sintaxe desses sabores de expresses
regulares muito semelhante, e geralmente compatvel, mas no totalmente.
Os escritores so preguiosos, tambm. Geralmente digitamos regex, ou regexp, para
designar uma nica expresso regular, e regexes para indicar o plural.
Os sabores regex no correspondem, um-para-um, s linguagens de programao.
Linguagens de script tendem a ter seus prprios sabores de expresso regular em-
butidos. Outras linguagens de programao contam com bibliotecas para suporte
a expresso regular. Algumas bibliotecas esto disponveis para vrias linguagens,
enquanto algumas linguagens podem recorrer a diferentes bibliotecas.
Este captulo introdutrio trata apenas dos sabores de expresses regulares, e ignora
completamente quaisquer consideraes a respeito de programao. O captulo 3
inicia as listagens de cdigo, ento voc pode dar uma espiada no tpico Linguagens
de programao e sabores da expresso regular daquele captulo, para descobrir
com quais sabores ir trabalhar. Por enquanto, ignore todas as coisas relacionadas
programao. As ferramentas listadas na prxima seo facilitam a explorao da
sintaxe da expresso regular por meio do aprenda fazendo.

Sabores regex abordados neste livro


Para este livro, foram selecionados os sabores regex mais populares em uso, atualmen-
te. Todos so sabores regex no estilo Perl. Alguns sabores tm mais recursos do que
outros. Mas, se dois sabores tm uma mesma caracterstica, eles tendem a utilizar a
mesma sintaxe. Vamos apontar as poucas incoerncias irritantes, conforme formos
nos deparando com elas.
Todos estes sabores regex fazem parte de linguagens de programao e bibliotecas
que esto em desenvolvimento ativo. A lista de sabores lhe diz quais verses este livro
cobre. Mais adiante no livro, mencionamos o sabor sem quaisquer verses, caso a ex-
presso regular atual funcione da mesma forma com todos os sabores. Quase sempre
esse ser o caso. Salvo as correes de bugs que afetam casos isolados, sabores regex
18 Expresses Regulares Cookbook

no tendem a mudar, exceto pela adio de recursos que do um novo significado


sintaxe, tratada anteriormente como um erro:

Perl
O suporte embutido do Perl para expresses regulares a principal razo pela
qual as regexes so populares hoje. Este livro cobre Perl 5.6, 5.8 e 5.10.
Muitos aplicativos e bibliotecas regex que dizem utilizar o Perl, ou expresses
regulares compatveis com o Perl, na realidade, meramente utilizam expresses
regulares no estilo Perl. Elas utilizam uma sintaxe de expresso regular simi-
lar do Perl, mas no suportam o mesmo conjunto de caractersticas. Muito
provavelmente, elas usam um dos sabores regex logo adiante. Esses sabores
so todos no estilo Perl.

PCRE
PCRE a biblioteca C das Expresses regulares compatveis com Perl, desen-
volvida por Philip Hazel. Voc pode baixar esta biblioteca de fonte aberta em
http://www.pcre.org. Este livro cobre as verses 4 a 7 da PCRE.
Embora PCRE afirme ser compatvel com Perl, e provavelmente o mais do
que qualquer outro sabor neste livro, trata-se, realmente, de apenas um estilo
Perl. Algumas funes, tais como o suporte a Unicode, so ligeiramente dife-
rentes, e voc no pode misturar cdigo Perl em sua expresso regular, como
o prprio Perl permite.
Devido a sua licena de cdigo aberto e programao slida, o PCRE encon-
trou seu caminho em muitas linguagens de programao e aplicaes. Ele est
embutido no PHP e empacotado em numerosos componentes Delphi. Se a
aplicao diz suportar expresses regulares compatveis com Perl, sem listar
especificamente o sabor regex usado, ela provavelmente est usando o PCRE.

. NET
O Framework Microsoft .NET fornece um conjunto completo de sabores de ex-
presses regulares no estilo Perl por meio do pacote System.Text.RegularExpressions.
Este livro cobre do .NET 1.0 at o 3.5. Estritamente falando, s existem duas
verses do System.Text.RegularExpressions: 1.0 e 2.0. Nenhuma alterao foi feita
para as classes Regex nas verses de .NET 1.1, 3.0 e 3.5.
Qualquer linguagem de programao .NET, incluindo o C#, VB.NET, Delphi
para .NET e at mesmo COBOL.NET, tem acesso completo aos sabores das
expresses regulares .NET. Se um aplicativo desenvolvido com .NET lhe ofe-
recer suporte s expresses regulares, pode estar certo de que ele usa o sabor
.NET, mesmo que diga utilizar expresses regulares de Perl. A nica exceo
Captulo 1 Introduo s expresses regulares 19

o Visual Studio (VS) em si. O ambiente de desenvolvimento integrado do VS


(IDE) ainda usa o velho sabor de expresso regular utilizado desde o incio,
que no o estilo Perl.

Java
Java 4 a primeira verso Java a fornecer suporte interno a expresses regulares
por meio do pacote java.util.regex. Ele ofuscou rapidamente as vrias bibliotecas
Java de expresses regulares de terceiros. Alm de ser padro e integrada, ofe-
rece um sabor de expresses regulares no estilo Perl, completo e com excelente
desempenho, mesmo quando comparado com aplicaes escritas em C. Este
livro aborda o pacote java.util.regex em Java 4, 5 e 6.
Se voc vem utilizando programas desenvolvidos em Java ao longo dos ltimos
anos, qualquer suporte a expresso regular oferecido por eles provavelmente
utiliza o sabor Java.

JavaScript
Neste livro, usamos o termo JavaScript para indicar o sabor da expresso regular
definida na verso 3 do padro ECMA-262. Esta norma define a linguagem
de programao ECMAScript, mais conhecida por suas implementaes de
JavaScript e JScript em diferentes navegadores. O Internet Explorer, do 5.5 at o 8.0,
o Firefox, o Opera e o Safari, todos implementam a 3 edio da ECMA-262. No
entanto, todos os navegadores apresentam vrios bugs, levando-os a desviarem-
se da norma. Apontamos essas questes em situaes em que elas importam.
Se um site permite que voc busque ou filtre usando uma expresso regular sem
esperar por uma resposta do servidor web, ele usa o sabor regex JavaScript, o
nico sabor de expresso regular que trabalha com todos os navegadores no lado
do cliente. Mesmo o Microsoft VBScript e o Adobe ActionScript 3 utilizam-no.

Python
Python suporta expresses regulares por meio do seu mdulo re. Este livro
cobre o Python 2.4 e 2.5. O suporte s expresses regulares do Python mantm-
se inalterado h muitos anos.

Ruby
O suporte s expresses regulares do Ruby parte da prpria linguagem Ruby,
similar ao Perl. Este livro cobre o Ruby 1.8 e 1.9. Uma compilao padro do
Ruby 1.8 utiliza o sabor de expresses regulares fornecido diretamente pelo
cdigo-fonte Ruby. Uma compilao padro do Ruby 1.9 utiliza a biblioteca
Oniguruma de expresses regulares. O Ruby 1.8 pode ser compilado para uti-
lizar a Oniguruma, e o Ruby 1.9 pode ser compilado para utilizar expresses
20 Expresses Regulares Cookbook

regulares Ruby mais antigas. Neste livro, identificamos o sabor Ruby nativo
como sendo o Ruby 1.8, e o sabor Oniguruma como o Ruby 1.9.
Para testar qual tipo de expresso regular Ruby seu site utiliza, tente utilizar
a expresso regular a++. O Ruby 1.8 dir que a expresso regular invlida,
porque no suporta quantificadores possessivos, enquanto que no Ruby 1.9
ela corresponder a uma sequncia de um ou mais caracteres.
A biblioteca Oniguruma foi projetada para ser compatvel com o Ruby 1.8,
adicionando novas funcionalidades que no iro conflitar com as expresses
regulares existentes. Os implementadores at deixaram funcionalidades que
provavelmente deveriam ter sido alteradas, como o uso do (?m) para significar
o ponto corresponde a quebras de linha, onde outros sabores de expresses
regulares utilizam (?s).

Pesquisa e substituio com expresses regulares


Pesquisa-e-substituio uma tarefa comum para as expresses regulares. Uma fun-
o de pesquisa-e-substituio envolve, como entrada, uma string de assunto, uma
expresso regular e uma string de substituio. A sada a string de assunto com
todas as correspondncias da expresso regular trocadas pelo texto de substituio.
Embora o texto de substituio no seja uma expresso regular, voc pode utilizar
certas sintaxes especiais para construir textos de substituio dinmicos. Todos os
sabores permitem que voc reinsira o texto correspondido pela expresso regular ou
por um grupo de captura dentro do texto de substituio. As receitas 2.20 e 2.21 ex-
plicam isso. Alguns sabores tambm suportam a insero do texto correspondido no
texto de substituio, como mostra a receita 2.22. No captulo 3, a receita 3.16 ensina
como gerar um texto de substituio diferente para cada correspondncia no cdigo.

Muitos sabores de textos de substituio


Ideias diferentes, de diferentes desenvolvedores de programas de expresses regulares,
levaram a uma ampla gama de sabores, cada um com uma sintaxe e conjuntos de
recursos diferentes. A histria, no caso dos textos de substituio, no diferente.
Na verdade, h mais sabores de textos de substituio do que sabores de expresses
regulares. Construir um mecanismo de expresso regular no fcil. A maioria dos
programadores prefere reutilizar um j existente, e a aplicao de uma funo de
pesquisa-e-substituio em um mecanismo de expresso regular existente bem
fcil. O resultado que existem muitos sabores de textos de substituio, no caso
das bibliotecas de expresses regulares, que no tm recursos nativos de pesquisa-
e-substituio.
Captulo 1 Introduo s expresses regulares 21

Felizmente, todos os sabores de expresses regulares neste livro tm sabores de textos


de substituio correspondentes, exceto o PCRE. Esta lacuna no PCRE complica a vida
dos programadores que utilizam sabores nele baseados. A biblioteca de cdigo aberto
do PCRE no inclui as funes necessrias para fazer substituies. Assim, todos os
aplicativos e linguagens de programao que se baseiam no PCRE precisam provi-
denciar sua prpria funo de pesquisa-e-substituio. A maioria dos programadores
tenta copiar sintaxes existentes, mas nunca as fazem exatamente da mesma maneira.
Este livro cobre os seguintes sabores de textos de substituio. Consulte Muitos
sabores de expresses regulares, na pgina 16, para mais detalhes sobre os sabores
de expresses regulares que correspondem aos sabores de textos de substituio:

Perl
Perl tem o suporte embutido para substituio de expresses regulares por
meio do operador s/regex/replace/. O sabor de texto de substituio do Perl
corresponde ao sabor de expresso regular do Perl. Este livro cobre do Perl
5.6 ao Pearl 5.10. Esta ltima verso adiciona suporte a retrorreferncias
(backreferences) no texto de substituio, ao acrescentar capturas nomeadas
sintaxe da expresso regular.

PHP
Neste livro, o sabor PHP de texto de substituio refere-se funo preg_replace.
Essa funo utiliza o sabor das expresses regulares PCRE e o sabor de texto
de substituio do PHP.
Outras linguagens de programao que utilizam o PCRE no utilizam o mesmo
sabor de texto de substituio que o PHP. Dependendo de onde o designer de
sua linguagem de programao obteve inspirao, a sintaxe de texto de subs-
tituio pode ser semelhante do PHP, ou a qualquer outro sabor de textos
de substituio deste livro.
O PHP tambm possui uma funo ereg_replace. Essa funo utiliza um sabor
diferente de expresso regular (POSIX ERE), alm de usar um sabor diferente
de texto de substituio. As funes ereg do PHP no so discutidas neste livro.

.NET
O pacote System.Text.RegularExpressions fornece vrias funes de pesquisa-e-
substituio. O sabor de texto de substituio do .NET corresponde ao sabor
de expresso regular .NET. Todas as verses .NET utilizam o mesmo sabor de
texto de substituio. Os novos recursos de expresso regular no .NET 2.0 no
afetam a sintaxe de texto de substituio.
22 Expresses Regulares Cookbook

Java
O pacote java.util.regex tem funes internas de pesquisa-e-substituio. Este livro
aborda o Java 4, 5 e 6. Todos utilizam a mesma sintaxe de texto de substituio.

JavaScript
Neste livro, utilizamos o termo JavaScript para indicar tanto o sabor de texto
de substituio, quanto o sabor de expresso regular, definidos na 3 edio
do padro ECMA-262.

Python
O mdulo re do Python oferece a funo sub para pesquisa-e-substituio. O
sabor de texto de substituio do Python corresponde ao sabor de expresso
regular Python. Este livro cobre o Python 2.4 e 2.5. O suporte s expresses
regulares do Python tem se mantido estvel por muitos anos.

Ruby
O suporte s expresses regulares do Ruby parte constituinte da linguagem
em si, incluindo a funo de pesquisa-e-substituio. Este livro aborda o Ruby
1.8 e 1.9. Uma compilao padro do Ruby 1.8 utiliza expresses regulares for-
necidas diretamente pelo cdigo-fonte, enquanto uma compilao padro do
Ruby 1.9 utiliza a biblioteca Oniguruma de expresses regulares. O Ruby 1.8
pode ser compilado para utilizar a biblioteca Oniguruma, e o Ruby 1.9 pode
ser compilado para utilizar uma expresso regular Ruby mais antiga. Neste
livro, identificamos o sabor nativo Ruby como sendo o Ruby 1.8 e o sabor
Oniguruma como sendo o Ruby 1.9.
A sintaxe de texto de substituio das verses 1.8 e 1.9 do Ruby a mesma, exceto
pelo fato de que o Ruby 1.9 adiciona retrorreferncias ao texto de substituio.
Captura nomeada um recurso novo nas expresses regulares do Ruby 1.9.

Ferramentas para se trabalhar com expresses regulares


A menos que voc j venha programando com expresses regulares por algum tempo,
recomendamos, em primeiro lugar, a manipulao das expresses regulares em uma
ferramenta, e no diretamente no cdigo-fonte. O exemplo das expresses regulares,
neste captulo e no captulo 2, so expresses regulares simples que no contm o esca-
pe extra que uma linguagem de programao (mesmo em um Unix shell) exige. Voc
pode digitar estas expresses regulares diretamente na caixa de busca de um aplicativo.
O captulo 3 explica como corresponder expresses regulares ao seu cdigo-fonte. Citar
uma expresso regular literal como uma string torna-a ainda mais difcil de ler, porque
Captulo 1 Introduo s expresses regulares 23

as regras de escape da string se misturam com as regras de escape das expresses re-
gulares. Evitaremos isso at a receita 3.1. Depois de entender os conceitos bsicos das
expresses regulares, voc ser capaz de enxergar em meio floresta de barras invertidas.
As ferramentas descritas nesta seo tambm fornecem depurao, verificao de
sintaxe e outros feedbacks, elementos que voc no teria na maioria dos ambientes
de programao. Portanto, ao desenvolver expresses regulares para seus aplicativos,
voc pode considerar til construir expresses regulares complicadas em uma dessas
ferramentas, antes de inseri-las em seu programa.

RegexBuddy
No momento em que escrevemos isso, RegexBuddy (Figura 1.1) a ferramenta mais
completa disponvel para criao, teste e implementao de expresses regulares. Ela
tem a habilidade nica de emular todos os sabores de expresses regulares discutidos
neste livro, e at mesmo de fazer converses entre os diferentes sabores.
RegexBuddy foi projetado e desenvolvido por Jan Goyvaerts, um dos autores deste
livro. Projetar e desenvolver RegexBuddy fez de Jan um especialista em expresses
regulares, e a utilizao do RegexBuddy ajudou a tornar o coautor Steven em um
viciado em expresses regulares, a ponto de produzir este livro para a OReilly.

Figura 1.1 RegexBuddy.


24 Expresses Regulares Cookbook

Se a captura de tela (Figura 1.1) parece um pouco carregada porque quisemos


dispor a maioria dos painis lado a lado, para mostrar a extensa funcionalidade do
RegexBuddy. A exibio padro acopla todos os painis perfeitamente em uma linha
de guias. Voc tambm pode arrastar os painis para um monitor secundrio.
Para experimentar uma das expresses regulares mostradas neste livro, simplesmente
digite-a na caixa de edio, no topo da janela do RegexBuddy. O RegexBuddy aplica
automaticamente a sintaxe, destacando a sua expresso regular e fazendo com que
os erros e parnteses incompatveis fiquem bvios.
O painel Create cria automaticamente uma anlise detalhada, em ingls, enquanto
digitamos a regex. D um duplo clique em qualquer descrio, na rvore da expresso
regular, para editar essa parte de sua expresso regular. Voc pode inserir novas partes
manualmente em sua expresso regular, ou clicar no boto Insert Token e selecionar o
que quiser em um menu. Por exemplo, se voc no se lembra da complexa sintaxe
para um procedimento de antecipao positiva (positive lookahead)), pode solicitar
ao RegexBuddy que insira os caracteres apropriados.
Digite ou cole algum texto de exemplo no painel Test. Quando o boto Highlight estiver
ativo, o RegexBuddy automaticamente sublinha o texto correspondido pela regex.
Alguns dos botes mais utilizados so:

List All
Exibe uma lista de todas as correspondncias.

Replace
O boto Replace, na parte superior, exibe uma nova janela que permite a digi-
tao do texto de substituio. O boto Replace, na caixa Test, permite que voc
visualize o texto de assunto aps as substituies feitas.

Split (O boto no painel Test, e no o do topo)


Trata a expresso regular como um separador e divide o assunto em tokens,
de acordo com os locais em que as correspondncias foram encontradas em
seu texto de assunto, usando a sua expresso regular.
Clique em qualquer um desses botes e selecione Update Automatically para fazer o Rege-
xBuddy manter os resultados em sincronia, dinamicamente, ao editar sua regex ou
texto de assunto.
Para ver exatamente como funcionar sua regex (ou no), clique em uma correspon-
dncia destacada, ou no ponto onde a regex falha no painel Test, e clique no boto
Debug. O RegexBuddy mudar para o painel Debug, mostrando passo a passo todos os
Captulo 1 Introduo s expresses regulares 25

processos de correspondncias. Clique em qualquer lugar no texto de sada do depu-


rador para ver qual smbolo regex corresponde ao texto em que voc clicou. Clique
em sua expresso regular para destacar esta parte da regex no depurador.
No painel Use, escolha sua linguagem de programao favorita. Em seguida, selecione
uma funo para gerar instantaneamente o cdigo-fonte que implementa sua regex.
Os modelos de cdigo-fonte do RegexBuddy so totalmente editveis por meio de seu
editor interno. Voc pode adicionar novas funes e at mesmo novas linguagens, ou
alterar as fornecidas.
Para testar a sua regex em um conjunto maior de dados, alterne para o painel GREP,
para pesquisar (e substituir) em qualquer nmero de arquivos e pastas.
Quando voc encontrar uma regex em seu cdigo-fonte, copie-a para a rea de trans-
ferncia, incluindo as aspas delimitadoras ou barras. No RegexBuddy, clique no boto
Paste, na parte superior, e selecione o estilo de string de sua linguagem de programao.
Sua regex aparecer, ento, no RegexBuddy como uma regex pura, sem as aspas extras
e escapes necessrios para literais strings. Utilize o boto Copy, na parte superior, para
criar uma string na sintaxe desejada, e cole-a de volta em seu cdigo-fonte.
Conforme sua experincia aumentar, possvel construir uma biblioteca de expres-
ses regulares no painel Library. Certifique-se de adicionar uma descrio detalhada
e um assunto de teste ao armazenar uma regex. As expresses regulares podem ser
enigmticas, mesmo para especialistas.
Se voc realmente no consegue entender uma regex, clique no painel Forum e, em
seguida, no boto Login. Se voc comprou o RegexBuddy, a tela de login aparecer.
Clique em OK, e voc estar imediatamente conectado ao Forum do Usurio RegexBuddy.
Steven e Jan s vezes esto por l.

RegexBuddy roda em Windows 98, ME, 2000, XP e Vista. Para os fs do Linux e da


Apple, o RegexBuddy tambm vai bem no VMware, Parallels, CrossOver Office e, com
algumas restries, no WINE. Voc pode baixar uma cpia de avaliao gratuita do
RegexBuddy em http://www.regexbuddy.com/RegexBuddyCookbook.exe. Exceto pelo
frum de usurios, a cpia totalmente funcional para sete dias de uso.

RegexPal
RegexPal (Figura 1.2) um testador on-line de expresses regulares criado por Steven
Levithan, um dos autores deste livro. Tudo de que voc precisa para us-lo um
navegador moderno. RegexPal inteiramente escrito em JavaScript, portanto ele
suporta apenas o sabor regex JavaScript implementado no navegador que estiver
usando para acess-lo.
26 Expresses Regulares Cookbook

Figura 1.2 RegexPal.

Para experimentar uma das expresses regulares mostradas neste livro, v a http://
www.regexpal.com. Digite a regex dentro da caixa que diz: Enter regex here. O RegexPal
aplica automaticamente o destacamento de sintaxe na sua expresso regular, revelando
imediatamente qualquer erro de sintaxe. O RegexPal tem conscincia das diferenas
entre navegadores, e dos problemas, oriundos destas diferenas, que podem arruinar
seu trabalho ao lidar com expresses regulares em JavaScript. Se uma determinada
sintaxe no funcionar corretamente em alguns navegadores, o RegexPal vai destac-
la como um erro.
Agora, digite ou cole algum exemplo de texto na caixa que diz: Enter test data here. O
RegexPal destaca automaticamente o texto correspondido por sua regex.
No h botes nos quais clicar, fazendo do RegexPal um dos mais convenientes tes-
tadores on-line para expresses regulares.

Mais testadores regex online


Criar um simples testador de expresso regular on-line fcil. Se voc tem algumas
habilidades bsicas de desenvolvimento web, a informao no captulo 3 tudo de
que precisa para criar seu prprio testador. Centenas de pessoas j o fizeram, mas
algumas delas acrescentaram recursos extras, tornando-os dignos de meno.
Captulo 1 Introduo s expresses regulares 27

regex.larsolavtorvik.com
Lars Olav Torvik disponibilizou um excelente testador de expresso regular on-line
em http://regex.larsolavtorvik.com (ver figura 1.3).

Figura 1.3 regex.larsolavtorvik.com.

Para comear, selecione o sabor da expresso regular com a qual esteja trabalhando,
clicando sobre o nome do sabor no topo da pgina. Lars oferece PHP PCRE, PHP
POSIX e JavaScript. PHP PCRE, sabor regex PCRE discutido neste livro, usado para
funes preg PHP. O POSIX um sabor regex antigo e limitado, usado pelas funes
ereg do PHP, no discutidas neste livro. Se voc selecionar o JavaScript, estar traba-
lhando com a implementao JavaScript do seu navegador.
Digite sua expresso regular no campo Pattern (padro) e seu texto de assunto no campo
Subject (assunto). Em seguida, o campo Matches (correspondncias) exibir o texto de
assunto com as correspondncias da regex em destaque. O campo Code exibe uma
nica linha de cdigo-fonte, que aplica sua regex a seu texto de assunto. Copiar e colar
28 Expresses Regulares Cookbook

este cdigo em seu editor de cdigo lhe poupar o trabalho enfadonho de converter
manualmente sua regex em uma string literal. Qualquer string ou array retornado
pelo cdigo exibido no campo Result. Como o Lars utilizou a tecnologia Ajax para
construir seu site, os resultados so atualizados em apenas alguns momentos, para
todos os sabores. Para utilizar a ferramenta voc tem que estar on-line, pois o PHP
processado no servidor, e no no navegador.
A segunda coluna exibe uma lista de comandos e opes regex. Estas dependem do
sabor regex. Os comandos regex, tipicamente, incluem operaes de correspondncia,
substituio e diviso. As opes da regex so comuns, tais como no-diferenciao
entre letras maisculas e minsculas (case insensitivity), bem como opes especficas
a cada implementao. Estes comandos e opes so descritos no captulo 3.

Nregex
http://www.nregex.com (Figura 1.4) um testador simples, construdo com a tecnologia
.NET por David Seruyange. Embora o site no diga qual sabor ele implementa, o
.NET 1.x era usado no momento da redao deste texto.
O layout da pgina um pouco confuso. Digite sua expresso regular no campo, sob
o rtulo Regular Expression, e defina as opes da regex utilizando as caixas de seleo
abaixo do campo. Digite o texto de assunto, na caixa grande que aparece na parte
inferior, substituindo o texto padro If I just had $5,00 then "she" wouldn't be so @#$!
mad.. Se o assunto for uma pgina da Web, digite a URL no campo Load Target From URL
e clique no boto Load, abaixo do campo de entrada. Se o seu assunto for um arquivo
em seu disco rgido, clique no boto Browse, localize o arquivo desejado e, em seguida,
clique no boto Load, abaixo do campo de entrada.
Seu texto de assunto aparecer duplicado no campo Matches & Replacements (Correspon-
dncias & Substituies) no centro da pgina web, com as correspondncias da regex
em destaque. Se voc digitar algo no campo Replacement String (String de Substituio),
o resultado da pesquisa-e-substituio ser apresentado. Se sua expresso regular for
invlida, aparecer ....
A correspondncia da regex feita em um cdigo .NET rodando no servidor, ento
voc precisa estar on-line para funcionar. Se as atualizaes automticas estiverem
lentas, talvez seja porque o texto de amostra seja muito longo, ento assinale a opo
Manually Evaluate Regex (Avaliar a Expresso Regular Manualmente), na caixa de seleo
acima do campo da sua expresso regular, para mostrar o boto Evaluate. Clique nesse
boto para atualizar a visualizao em Matches & Replacements.
Captulo 1 Introduo s expresses regulares 29

Rubular
Michael Lovitt disponibilizou um testador de regex minimalista on-line em http://
www.rubular.com (Figura 1.5), usando o sabor regex Ruby 1.8.

Figura 1.4 Nregex.

Digite a sua expresso regular na caixa entre as duas barras, abaixo de Your Regular
Expression. Voc pode ativar a no-diferenciao entre maisculas e minsculas, digi-
tando um i na pequena caixa posicionada aps a segunda barra. Da mesma forma,
se voc preferir, ative a opo a dot matches a line break (um ponto corresponde a uma
quebra de linha), digitando um m nessa mesma caixa. im ativa as duas opes. Embora
estas convenes possam parecer confusas se voc for iniciante no Ruby, elas satis-
fazem a sintaxe /regex/im usada para especificar uma regex no cdigo-fonte do Ruby.
30 Expresses Regulares Cookbook

Figura 1.5 Rubular.

Digite ou cole seu texto de assunto na caixa Your test string e aguarde um instante.
Uma nova caixa Match result aparecer direita, mostrando seu texto de assunto com
todas as correspondncias da expresso regular em destaque.

myregexp.com
Sergey Evdokimov criou vrios testadores de expresso regular para desenvolvedores
Java. A pgina em http://www.myregexp.com (Figura 1.6) oferece um testador regex
on-line. um applet Java que roda no seu navegador. O Java 4 (ou posterior) precisa
estar instalado em seu computador. O applet usa o pacote java.util.regex para avaliar
suas expresses regulares, uma funcionalidade nova do Java 4. Neste livro, o sabor
regex Java refere-se a este pacote.
Digite sua expresso regular na caixa Regular Expression. Use o menu Flags para definir
as opes da regex que voc desejar. Trs dessas opes tambm possuem caixas de
seleo diretas.
Se voc quiser testar uma regex j existente como uma string de cdigo Java, copie
toda a sequncia para a rea de transferncia. No testador myregexp.com, clique no
menu Edit e, em seguida, Paste Regex from Java String (Cole a expresso regular a partir de
uma String Java). No mesmo menu, escolha Copy Regex for Java Source (Copie a expresso
regular para um fonte Java) quando terminar de editar a expresso regular. O menu
Edit tambm possui comandos semelhantes para JavaScript e XML.
Captulo 1 Introduo s expresses regulares 31

Figura 1.6 myregexp.com

Abaixo da expresso regular, existem quatro guias que rodam quatro testes diferentes:

Find
Destaca todas as correspondncias da expresso regular no texto de assunto.
Estas so as correspondncias encontradas pelo mtodo Matcher.find() do Java.

Match
Testa se a expresso regular corresponde inteiramente ao texto de amostra.
Caso isso acontea, todo o texto realado. Isto o que fazem os mtodos
String.matches() e Matcher.matches().

Split
A segunda caixa direita mostra o array de strings retornado por String.split()
ou Pattern.split(), quando usados com sua expresso regular e o texto de assunto.
32 Expresses Regulares Cookbook

Replace
Digite o texto de substituio e a caixa direita exibir o texto retornado por
String.replaceAll() ou Matcher.replaceAll().

Voc pode encontrar outros testadores regex de Sergey por meio dos links no topo
da pgina em http://www.myregexp.com. Um deles um plug-in para o Eclipse, e o
outro, um plug-in para o IntelliJ IDEA.

reAnimator
O reAnimator, de Oliver Steele, encontrado em http://osteele.com/tools/reanimator
(Figura 1.7), no vai trazer uma regex morta de volta vida. Pelo contrrio, ele uma
pequena e divertida ferramenta que mostra uma representao grfica das mquinas
de estados finitos que um mecanismo de expresso regular utiliza para realizar uma
pesquisa de expresso regular.
A sintaxe de expresso regular do reAnimator muito limitada. compatvel com
todos os sabores discutidos neste livro. Qualquer regex que voc animar com o
reAnimator trabalhar com qualquer um dos sabores deste livro, mas o inverso, defini-
tivamente, no verdade. Isso acontece porque as expresses regulares do reAnimator
so regulares no sentido matemtico. A barra lateral Histria do termo Expresso
Regular, na pgina 16, explica isso brevemente.
Comece indo at a caixa Pattern, na parte superior da pgina, e pressione o boto Edit.
Digite sua expresso regular no campo Pattern e clique em Set. Digite lentamente o
texto de assunto no campo Input.
Ao digitar cada caractere, bolas coloridas iro mover-se atravs da mquina de estados
para indicar o ponto final obtido, at o momento, na mquina. Bolas azuis indicam
que a mquina de estados aceita a entrada, mas necessita de mais entradas para uma
correspondncia completa. Bolas verdes indicam que a entrada corresponde ao padro.
Nenhuma bola significa que a mquina de estados no corresponde entrada.
O reAnimator mostrar uma correspondncia apenas se a expresso regular correspon-
der string de entrada completa, como se voc a tivesse colocado entre ncoras ^ e
$. Esta outra propriedade das expresses que so regulares no sentido matemtico.

Mais testadores de expresses regulares para desktop


Expresso
Expresso (no confundir com o caf expresso) um aplicativo .NET para criar e
testar expresses regulares. Voc pode baix-lo em http://www.ultrapico.com/Expresso.
htm. O Framework .NET 2.0, ou posterior, deve estar instalado em seu computador.
Captulo 1 Introduo s expresses regulares 33

Figura 1.7 reAnimator.

O programa gratuito para testes por 60 dias. Aps o perodo de experimentao,


necessrio registr-lo, ou ele ir parar de funcionar. A inscrio gratuita, mas requer
seu endereo de e-mail para a Ultrapico. A chave de registro enviada por e-mail.
O Expresso exibe uma tela, como a mostrada na figura 1.8. A caixa Regular Expression,
onde voc digita sua expresso regular, fica sempre visvel. O realce de sintaxe no est
disponvel. A caixa Regex Analyzer cria automaticamente uma breve anlise, em ingls,
da sua expresso regular. Ela tambm fica sempre visvel.
No modo Design, voc pode definir as opes de correspondncias, como Ignore Case,
na parte inferior da tela. A maior parte do espao da tela ocupado por uma fileira de
guias, nas quais voc pode selecionar o token de expresso regular que deseja inserir.
Se tiver dois monitores, ou um monitor grande, clique no boto Undock, para que a
fileira de guias flutue. Ento, voc tambm poder construir sua expresso regular
no outro modo (Test Mode, ou Modo Teste).
Em modo de teste, digite,ou cole o texto de assunto no canto inferior esquerdo. Em
seguida, clique no boto Run Match (Executar Correspondncia) para obter uma lista
de todas as correspondncias na caixa Search Results (Resultados da Pesquisa). No aplicado
nenhum realce ao texto de assunto. Clique em uma correspondncia, nos resultados,
para selecionar a correspondncia no texto de assunto.
34 Expresses Regulares Cookbook

Figura 1.8 Expresso.

A guia Expression Library (Biblioteca de Expresses) mostra uma lista de assuntos de ex-
presses regulares e uma lista de expresses regulares recentes. Sua regex adicionada
lista cada vez que voc pressiona Run Match.
Voc pode editar a biblioteca por meio do menu Library, na barra de menu principal.

The Regulator
The Regulator, que voc pode baixar em http://sourceforge.net/projects/regulator, no
seguro para uso em mergulhos submarinos ou em botijes de gs de cozinha2; trata-
se de outra aplicao .NET para criao e teste de expresses regulares. A verso mais
recente requer .NET 2.0 ou posterior. As verses mais antigas para .NET 1.x ainda
podem ser baixadas. The Regulator possui cdigo aberto, e nenhum pagamento ou
registro necessrio.

2 N.T.: Trocadilho com a palavra regulator, que pode ser entendida como uma vlvula de regulagem.
Captulo 1 Introduo s expresses regulares 35

The Regulator faz tudo em uma tela (Figura 1.9). Na guia New Document, voc digita
sua expresso regular. Realce de sintaxe aplicado automaticamente, mas os erros
de sintaxe em sua regex no ficam bvios. Clique com o boto direito do mouse
para selecionar o token de regex que desejar inserir a partir de um menu. Voc pode
definir as opes da expresso regular por meio dos botes na barra de ferramentas
principal. Os cones so um pouco enigmticos. Espere a dica para ver qual opo
voc est definindo em cada boto.

Figura 1.9 The Regulator.

Abaixo da rea para sua regex, direita, clique no boto Input, para exibir o espao
para colar seu texto de assunto. Clique no boto Replace with para digitar o texto de
substituio, caso queira fazer uma pesquisa-e-substituio. Abaixo da regex,
esquerda, voc ver os resultados da sua operao regex. Os resultados no so atu-
alizados automaticamente: voc deve clicar no boto Match, Replace ou Split, na barra
de ferramentas, para atualizar os resultados. Nenhum realce aplicado entrada.
Clique em uma correspondncia nos resultados para selecion-la no texto de assunto.
O painel Regex Analyzer mostra, em ingls, uma anlise simples de sua expresso regular,
mas ele no automtico, ou interativo. Para atualizar a anlise, selecione Regex Analyzer
no menu View, mesmo que j esteja visvel. Clicar sobre a anlise somente move o
cursor de texto.

grep
O nome grep derivado do comando g/re/p, que realizava uma pesquisa de expresso
regular no editor de texto ed do Unix, uma das primeiras aplicaes a suportar ex-
presses regulares. Este comando era to popular que, atualmente, todos os sistemas
Unix possuem um utilitrio grep dedicado pesquisa em arquivos utilizando uma
36 Expresses Regulares Cookbook

expresso regular. Se voc estiver usando Unix, Linux ou Mac OS X, digite man grep
em uma janela do terminal para aprender tudo sobre ele.
As trs ferramentas seguintes so aplicativos do Windows que fazem o mesmo que
o grep, e muito mais.

PowerGREP
PowerGREP, desenvolvido por Jan Goyvaerts, um dos autores deste livro, prova-
velmente a ferramenta grep mais completa disponvel para a plataforma Microsoft
Windows (Figura 1.10). PowerGREP usa um sabor regex personalizado, que combina
o melhor dos sabores discutidos neste livro. Este sabor identificado como JGsoft
dentro do RegexBuddy.

Figura 1.10 PowerGREP.

Para executar uma busca rpida de expresso regular, basta selecionar Clear (Limpar),
no menu Action (Ao), e digitar sua expresso regular na caixa de busca no painel
Action. Clique em uma pasta no painel File Selector (Seletor de Arquivos), e selecione
Include File or Folder (Incluir Arquivo ou Pasta) ou Include Folder and Subfolders (Incluir Pastas
e Subpastas) no menu File Selector. Em seguida, selecione Execute (Executar), no menu
Action, para executar sua pesquisa.
Captulo 1 Introduo s expresses regulares 37

Para executar uma pesquisa-e-substituio, selecione search-and-replace (pesquisar e


substituir) na lista suspensa action type (tipo de ao), no canto superior esquerdo do
painel Action, depois de limpar a ao. A caixa Replace (Substituir) aparecer abaixo da
caixa Search (Pesquisa). Digite seu texto de substituio. As demais etapas so seme-
lhantes pesquisa.
O PowerGREP tem a capacidade nica de utilizar at trs listas de expresses regu-
lares ao mesmo tempo, com qualquer nmero de expresses regulares em cada lista.
Enquanto os dois ltimos pargrafos fornecem tudo de que voc precisa para executar
pesquisas simples, como em qualquer ferramenta grep, liberar todo o potencial do
PowerGREP pode exigir a leitura da documentao detalhada da ferramenta.
PowerGREP roda em Windows 98, ME, 2000, XP e Vista. Voc pode baixar uma
cpia de avaliao gratuita em http://www.powergrep.com/PowerGREPCookbook.exe.
Com exceo da gravao de resultados e bibliotecas, a cpia totalmente funcional
durante 15 dias de uso efetivo. Embora a cpia no salve os resultados mostrados no
painel Results, ela modificar todos os seus arquivos durante as aes de pesquisa-e-
substituio, tal como ocorre na verso completa.

Windows Grep
Windows Grep (http://www.wingrep.com) uma das ferramentas grep mais antigas
para Windows. Sua idade aparece um pouco na interface de usurio (Figura 1.11),
mas ele faz bem o que se prope a fazer. Ele suporta um sabor de expresso regular
limitado, chamado POSIX ERE. No caso das funcionalidades suportadas, ele utiliza
a mesma sintaxe que os sabores deste livro. Windows Grep shareware, o que signi-
fica que voc pode baix-lo gratuitamente, mas o pagamento esperado, caso queira
mant-lo em seu computador.
Para preparar uma pesquisa, selecione Search no menu Search. A tela que aparece pode
ser diferente, dependendo do que voc selecionou; Beginner Mode (Modo Iniciante) ou
Expert Mode (Modo Especialista), no menu Options. Os iniciantes obtm um passo-a-passo
do assistente, enquanto os especialistas obtm um dilogo com guias.
Ao configurar uma pesquisa, o Windows Grep imediatamente a executa, presenteando-
lhe com uma lista de arquivos em que foram encontradas correspondncias. Clique
uma vez em um arquivo para ver suas correspondncias no painel inferior, e d um
duplo clique para abrir o arquivo. Selecione All Matches (Todas as Correspondncias)
no menu View para mostrar tudo.
Para executar uma pesquisa-e-substituio, selecione Replace no menu Search.
38 Expresses Regulares Cookbook

Figura 1.11 Windows Grep.

RegexRenamer
RegexRenamer (Figura 1.12) no realmente uma ferramenta grep. Ao invs de pes-
quisar o contedo de arquivos, ele pesquisa e substitui nomes de arquivos. Voc pode
baix-lo em http://regexrenamer.sourceforge.net. RegexRenamer requer a verso 2.0 ou
posterior do Microsoft .NET Framework.
Digite sua expresso regular na caixa Match, e o texto de substituio na caixa Replace.
Clique em /i para ativar a no-diferenciao de maisculas e minsculas, e em /g
para substituir todas as correspondncias encontradas em cada arquivo, em vez de
substituir apenas a primeira. /x ativa a sintaxe de espaamento livre, que no muito
til, pois voc tem apenas uma linha para digitar sua expresso regular.
Use a rvore do lado esquerdo para selecionar a pasta que contm os arquivos que
deseja renomear. Voc pode definir uma mscara de arquivo ou um filtro de expresso
regular no canto superior direito. Isso restringir a lista de arquivos nos quais sua
expresso regular de procura-e-substituio ser aplicada. Utilizar uma expresso
regular para filtrar e outra para substituir um procedimento muito mais prtico do
que tentar executar as duas funes com apenas uma regex.
Captulo 1 Introduo s expresses regulares 39

Figura 1.12 RegexRenamer.

Editores de texto famosos


A maioria dos editores de texto modernos tem pelo menos um suporte bsico a ex-
presses regulares. No painel search (pesquisa) ou search-and-replace (pesquisar e substituir),
normalmente voc encontra uma caixa de seleo para ativar o modo de expresso
regular. Alguns editores, como o EditPad Pro, tambm utilizam expresses regulares
em vrias funcionalidades de processamento de texto, tais como o realce de sintaxe
ou de classes, e as listas de funo. A documentao de cada editor explica todas essas
funcionalidades. Editores de texto conhecidos, com suporte a expresses regulares,
incluem:
Boxer Text Editor (PCRE)
Dreamweaver (JavaScript)
EditPad Pro (sabor personalizado que combina o melhor dos sabores discutidos
neste livro, chamado JGsoft em RegexBuddy)
Multi-Edit (PCRE, se voc selecionar a opo Perl)
NoteTab (PCRE)
UltraEdit (PCRE)
TextMate (Ruby 1.9 [Oniguruma])