Professional Documents
Culture Documents
Novatec
Copyright
Dados
08-07091
CDD-005.115
ndices para catlogo sistemtico:
1. Expresses regulares : Cincia da computao
005.115
(CIP)
2001
2006
2008
2009
O primeiro encontro
Voltemos uma dcada, ao ano de 1999. Fui ver o filme Matrix no cinema (a
cmera girava mesmo, cara!) e o bug do milnio seria o fim do mundo, o
Apocalipse Nerd. Para garantir, imprimi o extrato da conta bancria no dia
31 de dezembro. Sabe como , vai que
Mas 1999 marcou minha vida mesmo por causa de uma coisinha que
acabou cruzando o meu caminho: Expresses Regulares. Nosso encontro foi
acidental. Eu no queria saber delas, alis, eu nem sabia que elas existiam.
17
[ 18 ]
Expresses Regulares
Naquela poca, o que eu queria mesmo era aprender Sed, o comando mgico
do Unix.
Eu desejei o posto de guru do Sed dentro da Conectiva (hoje
chamada Mandriva), a empresa onde eu trabalhava. Como na
poca no havia ningum l dentro que realmente soubesse usar
o programa, foi minha primeira chance de ser o especialista
em algum assunto. Sabe como , primeiro emprego, novato em
absolutamente tudo, era uma chance de ouro que eu agarrei forte.
Assinei a lista de discusso gringa, li a man page inmeras vezes
e passei vrias madrugadas estudando o Sed FAQ em casa, numa
imerso obstinada.
Era isso, meu nico objetivo era aprender Sed. S. Mais nada. Ele j era
difcil o suficiente para me manter ocupado por semanas. Mas quando fui estudar o FAQ, ali no meio tinham uns aliens tipo ^(.*): e [0-9]{1,3}. Que isso?
Aurlio, estas so as Expresses Regulares!
H?
Esses aliens que voc viu so metacaracteres que compem expresses
regulares.
Quem t falando?
Faz diferena?
Mmmm No.
Ento?
T, fala.
Voc no quer aprender Sed?
Quero.
Voc no quer DOMINAR o Sed?
Quero! Quero! Quero!
Ento, primeiro vai ter de dominar essas expresses feiosas.
Srio?
Srio.
Danou-se.
19
Fiquei arrasado com essa revelao. No podia ser verdade. Tentei comov-lo:
Mas eu s queria aprender Sed!
E...
E essas expresses so muito mais difceis!
Sim!
P, foi uma ducha de gua fria. Uma ducha no, foi um banho de cachoeira
no inverno s seis da manh.
Mas Mas que
Sem choro. Aprenda ou desista de uma vez.
Desistir? Retroceder nunca, render-se jamais!
A paixo
Nos meus estudos da madrugada, fui aos poucos entendendo o que o Sed
fazia. Mas era impossvel compreend-lo sem saber o que faziam aqueles
smbolos estranhos, ento fui aprendendo expresses regulares ao mesmo
tempo, em doses homeopticas.
Confesso que, no comeo, eu no gostei das expresses. Achei tudo muito
obscuro, mal explicado e feio. Parecia uma grande gambiarra, que no final,
funcionava por mgica.
Na lista de discusso gringa do Sed, apareciam muitas dvidas sobre as
expresses, e aos poucos fui acompanhando e entendendo um pedacinho
aqui, outro ali. Sempre testava os exemplos na minha mquina, tentava fazer
variaes, tirava um caractere aqui, colocava outro ali e via no que dava.
triste aprender assim, sem um texto que te leve pela mo do incio ao fim
em uma sequncia lgica, mas na poca eu no tinha outra escolha Mais
tarde, tentei compensar o trauma com meu prprio livro. :)
Mas devagar e sempre, como geralmente so as coisas para mim, fui
aprendendo.
No sei dizer quanto tempo demorou para eu conseguir fazer minhas prprias expresses, mas aquela averso inicial transformou-se em curiosidade,
[ 20 ]
Expresses Regulares
Aurlio, menos!
Ops. T.
O casamento
No ano seguinte (2000), a Conectiva lanou a primeira revista nacional sobre
Linux, a Revista do Linux. Os funcionrios foram convidados a contribuir
com artigos. Gostei da ideia e me apressei para escrever sobre o que eu sabia.
Na terceira edio da revista, apareceram dois artigos meus, um sobre o modo
texto e outro sobre as ento misteriosas (rufam os tambores) expresses
regulares! (ooooh)
Ao reler o texto do primeiro artigo, engraado perceber como confuso, bagunado. Mas teve um pargrafo em especial que foi o campeo: no
entendi nada. Misturei ignorecase com curinga e ficou sem p nem cabea:
Alguns editores, com uma busca um pouco mais esperta, permitem a
procura ignorando a diferena entre letras maisculas e minsculas,
atravs do uso de um curinga, geralmente o asterisco (*), que significa
qualquer coisa.
Depois saiu a segunda parte desse artigo, que ficou melhor, no to confusa.
curioso perceber que nessa poca eu ainda no tinha achado nomes legais
para alguns metacaracteres. O ou eu chamava de alternncia e o retrovisor
era o horrvel referncia retroativa, uma tentativa de traduzir backreference.
Coisas da vida
Foi em 2000 tambm que resolvi meter o p na jaca de vez e ler o desafiador
Mastering Regular Expressions. Um livro enorme, denso, completo, (posso
dizer chato sem parecer que invejinha?), que esmiua cada detalhe de
cada tipo de implementao das expresses regulares. a obra-prima sobre
o assunto, mas infelizmente, foi escrito em ingls.
21
A Conectiva comprou o livro e eu dedicava parte de meu horrio de trabalho para l-lo e (tentar) entend-lo. Apanhei, mas consegui ler o tijolo. Com
meu ingls tosco e falta de conhecimento sobre alguns assuntos, devo ter
entendido metade do livro. Mas foi suficiente para me mostrar todo o poder
que essas expresses tm. Foi um caminho sem volta, eu j no era mais um
mero usurio, agora eu sentia que dominava as benditas regex.
Para praticar o conhecimento novo, escrevi o programa txt2regex, um
assistente que te ajuda a compor uma expresso regular. Ele faz perguntas,
voc responde e plim!, l est sua expresso, pronta para ser usada. Ele fez
sucesso durante alguns anos. Depois, no o atualizei mais e foi sendo esquecido gradativamente Snif.
Com os artigos na Revista do Linux e o txt2regex, fiquei conhecido como o
cara das regex na Conectiva e em alguns crculos nerds. Mas o assunto ainda
era um nobre desconhecido para a maioria dos usurios. Isso era lamentvel,
e eu tinha de fazer algo para divulgar as regex ainda mais.
A concepo
Numa manh qualquer de 2001, eu estava conversando com meu chefe,
Wanderlei Cavassin, sobre algo relacionado s expresses. No lembro se ele
estava com uma dvida ou se queria mostrar algo que tinha encontrado. S
lembro que em determinado ponto, do nada, ele disparou:
Verde, j que voc manja disso, por que no escreve um livro?
Hein?
Fui pego de surpresa. Nunca tinha pensado nessa hiptese. Para mim, escrever livros tcnicos era coisa de gente grande, de professor universitrio com
barba grande e cabelos brancos. Eu, com meus 23 aninhos, era apenas um girino.
Mas ele continuou, dizendo que a editora Novatec, aquela que fazia uns
livros fininhos (Guias de Consulta Rpida), estava procurando autores e
me incentivou a mandar um e-mail. Foi tudo muito rpido, terminamos a
conversa e eu j enviei o e-mail, sem pensar muito. No sei como, mas ainda
tenho uma cpia desse e-mail histrico aqui:
[ 22 ]
Expresses Regulares
De: verde@conectiva.com.br
Assunto: autor para guias de sed e expresses regulares
Data: 12 de abril de 2001 11h45min22s GMT-03:00
Para: novo@novateceditora.com.br
oi,
estava olhando a pgina de vocs e vi que esto procurando
autores de guias de consulta rpida para vrios temas tcnicos.
se tiverem interesse em publicar algo sobre sed e/ou expresses
regulares, me candidato.
j tenho documentos, textos e programas publicados caso tenham
interesse:
sed-HOWTO
http://conectiva.com.br/~aurelio/sed/sed-HOWTO
txt2sgml.sed script em sed que converte texto puro para SGML
http://conectiva.com.br/~aurelio/sed/programas/txt2sgml-sed
expresses regulares parte 1
http://www.RevistaDoLinux.com.br/ed/003/ferramentas.php3
expresses regulares parte 2
http://www.RevistaDoLinux.com.br/ed/007/ereg.php3
txt2regexp programa "wizard" de expresses regulares
http://freshmeat.net/projects/txt2regexp
valeu.
-s:(>(^a]http://www.verde666.org^[:wq
23
O primeiro filho
Foram muitos e-mails e telefonemas trocados com o Rubens Prates, o simptico editor da Novatec. Eu tinha muitas dvidas, escrever um livro parecia
ser algo muito complicado, fora da minha realidade de programador. Mas ele
pacientemente foi iluminando o caminho, dizendo o que tinha de ser feito.
Primeiro montei uma lista de assuntos, como se fosse o sumrio. Nesse
momento surgiu a diviso usada at hoje, de primeiro falar sobre cada um
dos metacaracteres e depois dar exemplos nas linguagens de programao.
O problema foi na hora de comear a escrever o texto em si, no conseguimos nos entender nos formatos. Eu usava Linux e a editora usava Windows.
Eu escrevia textos no Vim e eles esperavam receber no formato do Adobe
PageMaker. Como no havia PageMaker para Linux, surgiu um impasse.
Meus amigos Fabio Minami e Osvaldo Santana mataram a charada,
quando descobriram que o PageMaker tambm lia arquivos com marcaes,
parecido com o HTML. Ento, fiz um conversor (txt2pagemaker), pois assim
eu poderia continuar escrevendo normalmente no Vim e, no final, converteria
o texto para o formato do PageMaker. Curiosidade: este programa evoluiu e
se tornou o txt2tags, que muito utilizado at hoje.
A escrita do livro correu tranquila at, pois eu dominava o assunto. Foi mais
colocar em palavras as ideias que eu j tinha na cabea, junto com bastante
piadinhas e descontrao, para quebrar o gelo das expresses. Essa frmula,
que surgiu meio sem querer, acabou se tornando a identidade do livro.
A correria foi no final. Planejamos lanar o livro na Fenasoft, a maior feira
de informtica da poca. Mas o prazo estava apertado e eu no iria conseguir
[ 24 ]
Expresses Regulares
O segundo filho
Sabe, 2006 foi um ano realmente estranho em minha vida. No final de 2005,
tive uma crise: estava cansado de trabalhar com informtica e pedi demisso
da Conectiva. Fiquei semanas pensando no que fazer da vida, pois queria
largar de vez o computador.
25
Mais uma vez, o e-mail do Rubens chegou para mudar minha vida.
Em setembro de 2006, o estoque do Guia de Consulta Rpida estava acabando. A ideia inicial era somente arrumar as erratas e reimprimir o livrinho.
Mas, nas conversas com o editor, ele sugeriu transformar o guia em um livro
de verdade. Me empolguei, pois eu no gostava de chamar o guia fininho de
livro, era um --force.
Naquele momento, no vi o livro como a salvao das minhas finanas,
pois eu estava acostumado com os tmidos 60 reais mensais do guia. No achei
que isso fosse mudar substancialmente com o livro novo. De qualquer forma,
como eu tinha tempo sobrando para trabalhar no livro, fiz uma reforma geral.
E foi assim que aquela minhocona espremida nas pginas estreitas do guia
foi atualizada e organizada em captulos, apndices, sumrio, ndice remissivo,
dedicatria, agradecimentos e at um prefcio. Tambm escrevi contedo
novo, surgindo os tpicos de C, Java, Ruby e OpenOffice.
[ 26 ]
Expresses Regulares
27
O terceiro filho
Em 2008, cerca de 20 meses aps seu lanamento, o livro branco esgotou-se.
Novamente veio a dvida se faramos uma simples reimpresso ou se daramos um passo adiante, fazendo uma segunda edio com contedo novo.
Eu queria s reimprimir, pois tinha recm-lanado o livro de shell e estava
exausto. No queria nem saber de livro por um bom tempo. Mas com o incentivo
da minha noiva Mog e do editor Rubens, l fui eu mexer no piazinho novamente.
O plano inicial era somente revisar e adicionar alguns tpicos novos, mas
eu estava incomodado com o captulo de linguagens de programao. O leitor chegava l todo empolgado, querendo brincar com as expresses em sua
linguagem favorita, mas o livro o deixava na mo nessa hora, pela falta de
exemplos e o texto resumido. Pudera, grande parte do texto ainda era l de
2001, quando escrevi o guia rpido. S havia uma alternativa: reescrever tudo.
O que era para durar semanas transformou-se em meses. Reescrevi a
maioria dos tpicos de programao usando um formato novo, recheado de
exemplos aps cada pargrafo, para ficar bem prtico. No embalo, ainda vieram
vrios tpicos novos, como Grep, PHP PCRE e Shell Script. At os bancos de
dados MySQL e PostgreSQL entraram na festa. Foi uma baita atualizao
que fez o livro saltar de 141 para 168 pginas.
Contudo, a caracterstica mais marcante dessa segunda edio foi ideia
da Mog: colocar um amarelo vibrante e berrante na capa. Sempre que amos s livrarias, demorava muito para encontrar o livro branco do piazinho,
espremido entre tantos outros livros coloridos. Com a nova cor chamativa,
no tinha como no v-lo.
No dia 15 de agosto de 2008, nasceu o Expresses Regulares Uma abordagem divertida, 2 edio, o amarelo. J no primeiro ms, foi o mais vendido
na Livraria Cultura, e no ms seguinte, fez dobradinha no pdio da Livraria
Tempo Real com o meu outro livro (Shell Script Profissional). Uau, at hoje
me arrepio com essas conquistas. Parece mentira!
O livro tambm ganhou um site s dele, o www.piazinho.com.br, muito chique.
Por falar em piazinho, esse nome acabou pegando. Muitos leitores me escrevem dizendo que compraram o livro do piazinho, ou ainda, o pi amarelo.
[ 28 ]
Expresses Regulares
O quarto filho
Quando o amarelo iria completar um ano de vida, uma surpresa: j estava
acabando! Recebi o j tradicional e-mail da editora informando sobre o estoque baixo, mas desta vez no tive dvida nem preguia: faria uma edio
nova. Afinal, agora que assumi de vez a carreira de escritor, faz parte. Cheio
de gs, j comecei a planejar a nova escrita nos dias seguintes.
Escrever uma tarefa solitria e cansativa. preciso concentrao extrema,
sem barulho nem distraes, horas a fio, seno o texto no sai. Mas, desta vez,
resolvi experimentar algo diferente: usei o meu Twitter (@oreio) para divulgar
ao vivo os progressos da escrita, dando a chance de os leitores acompanharem e participarem no processo. E no que deu muito certo?
Os leitores responderam com empolgao a cada progresso, dando sugestes e festejando o trmino de cada tpico novo. Isso me motivou tambm
e acabei escrevendo alm do planejado. O tpico HTML5, por exemplo, foi
sugesto dos leitores. Tambm fui prontamente atendido quando pedi ajuda
com o .NET e o Oracle.
Foram dezenas de mensagens enviadas. Quem acompanhou, percebeu
como foi intenso o trabalho para essa nova edio. Separei algumas das mensagens para voc, leitor, poder sentir um pouco do gostinho de participar de
um livro enquanto ele est sendo escrito:
1 semana:
Experincia nova: vou twittar a criao da 3 ed. do livro de regex pra
ver no que d. Acompanhe, opine, participe!
Vou comear light, com o Google Docs, que tem regex desde maro/09.
Comear chato, d uma preguiiia...
Essa tal de Lua t me dando um baile! Tem muitos detalhes nas regex,
esse captulo vai ficar enorme :)
Queria fazer um captulo de Oracle, mas nunca nem vi um. Algum
que tem acesso a um, t afim de me ajudar nos testes?
A 1 semana rendeu: 28h de trabalho, umas 15 pginas escritas, tpicos
novos: Google Docs, Lua e SQLite. Que venha a prxima!
29
2 semana:
Foco, foco, foco. Preciso voltar a escrever o #piazinho3. Mas estas distraes (#moneylog, #miniman) so to legais hehe.
Oracle, l vamos ns de novo. Esse captulo est muito chato de escrever,
tomara que acabe logo.
Terminei o captulo de Oracle, deu umas 7h no total. Valeu @lornlab, @
guxtavo14 e @felipesecure pela ajuda com os testes!
3 semana:
Nunca tinha usado o Mono, mas ele salvou meu dia. Compiladores
C# e VB.NET funcionando no Mac. Agora posso trabalhar.
Agora tou num dilema com VB e C#. O texto ser praticamente o
mesmo, s mudam os exemplos. Misturar em um captulo ou separar?
Obrigado a todos pelas sugestes. Vou tentar misturar e ver que bicho
sai :)
Estou fazendo uma pesquisa sobre o <input pattern=""> do HTML5,
que aceita regex. Parece um bom candidato pra entrar no livro.
Tou escrevendo o captulo de HTML5. coisa pro futuro, mas resolvi
me adiantar :) Valeu
e @cbueno pela grande dica!
4 semana:
Esta a semana da reviso e das atualizaes. Se voc tem alguma
sugesto de melhoria no contedo, agora a hora de falar! :)
Desde ontem estou escrevendo o (enorme) Prefcio novo, que ser bem
pessoal e contador de histria, igual no livro de shell :)
Interessante: o Prefcio apareceu no twitter e o twitter vai aparecer no
Prefcio.
Agora a minha histria mescla-se com a sua. Voc est lendo a edio
mais recente do livro que venho escrevendo e melhorando h tantos anos.
Espero que voc goste da leitura, e que se divirta bastante ao mesmo tempo
que aprende. Desejo que daqui para frente as expresses regulares faam parte
de sua vida tambm!