SEGUNDA EDIÇÃO Expressões Regulares Guia de Bolso Guia de Bolso: Expressões Regulares I
II Guia de Bolso: Expressões Regulares
Conteúdo Sobre Este Livro 1 Introdução a Expressões Regulares e Casamento de Padrões 2 Metacaracteres, Modos e Construções de Expressões Regulares 4 Suporte Unicode 14 Livro de Receitas de Expressões Regulares 14 Receitas 15 Perl 5.8 17 Metacaracteres com Suporte 17 Operadores de Expressões Regulares 24 Suporte Unicode 27 Exemplos 28 Outros Recursos 29 Java (java.util.regex) 29 Metacaracteres com Suporte 30 Interfaces e Classes de Expressões Regulares 35 Suporte Unicode 40 Exemplos 41 Outros Recursos 43.NET e C# 43 Metacaracteres com Suporte 43 Interfaces e Classes de Expressões Regulares 48 Suporte Unicode 53 Exemplos 53 Guia de Bolso: Expressões Regulares V
Outros Recursos 55 PHP 55 Metacaracteres com Suporte 56 Funções de Casamento de Padrões 61 Exemplos 63 Outros Recursos 64 Python 64 Metacaracteres com Suporte 65 Funções e Objetos de Módulo re 69 Suporte Unicode 72 Exemplos 72 Outros Recursos 74 RUBY 74 Metacaracteres com Suporte 74 Interface Orientada a Objetos 79 Suporte Unicode 84 Exemplos 84 JavaScript 85 Metacaracteres com Suporte 85 Objetos e Métodos de Casamento de Padrões 88 Exemplos 91 Outros Recursos 92 PCRE 92 Metacaracteres com Suporte 93 API PCRE 100 Suporte Unicode 101 Exemplos 103 Outros Recursos 106 VI Guia de Bolso: Expressões Regulares
Apache Web Server 107 Metacaracteres com Suporte 107 RewriteRule 111 Diretivas de combinação 114 Exemplos114 Editor vi 115 Metacaracteres com Suporte 115 Casamento de Padrões 119 Exemplos 121 Outros Recursos 121 Ferramentas Shell 121 Metacaracteres com Suporte 122 Outros Recursos 128 Guia de Bolso: Expressões Regulares VII
VIII Guia de Bolso: Expressões Regulares
Guia de Bolso de Expressões Regulares Expressões regulares é uma linguagem utilizada para manipulação e realização de parse em texto. São muitas vezes usadas para desempenhar complexas operações de pesquisa e substituição, além de validar que os dados do texto são bem formados. Hoje em dia, expressões regulares são incluídas na maioria das linguagens de programação, assim como em muitas ferramentas de linha de comando, bases de dados, aplicações, editores e linguagens de script. Este livro tem como objetivo dar um acesso rápido à sintaxe e a operações de casamento de padrões mais populares destas linguagens, de modo que seja possível aplicar seu conhecimento de expressões regulares em qualquer ambiente. A segunda edição deste livro acrescenta seções sobre Ruby e Apache web server, expressões regulares comuns, além de atualizar linguagens existentes. Sobre Este Livro Este livro inicia com uma introdução geral às expressões regulares. A primeira seção descreve e define as construções utilizadas em expressões regulares e estabelece os princípios comuns de casamento de padrões. As demais seções do livro são dedicadas à sintaxe, funcionalidades e uso de expressões regulares em várias implementações. As implementações abordadas neste livro são Perl, Java,.NET, C#, Ruby, Python, PCRE, PHP, Apache web server, editor vi, JavaScript e ferramentas shell. Convenções Utilizadas Neste Livro As seguintes convenções tipográficas são utilizadas neste livro: Itálico Utilizado para a ênfase, termos novos, nomes de programa e URLs Guia de Bolso: Expressões Regulares IX
Fonte Courrier New itálico Utilizado para o texto que deva ser substituído com os valores fornecidos pelo usuário Fonte Courrier New negrito Usado nos exemplos para comandos ou outro texto que deva ser digitado literalmente pelo usuário Agradecimentos Mastering Regular Expressions (Dominando Expressões Regulares), de Jeffrey E. F. Friedl (O Reilly), é o trabalho definitivo sobre expressões regulares. Ao escrever, confiei de maneira expressiva em seu livro e recomendação. Por conveniência, este livro fornece referências de páginas para Mastering Regular Expressions (Dominando Expressões Regulares), Terceira Edição (MRE), para a discussão expandida da sintaxe e conceitos de expressões regulares. Nat Torkington e Linda Mui foram os excelentes editores que me direcionaram ao constatarem ser uma complicada primeira edição. Esta edição foi auxiliada pelas ótimas habilidades editoriais de Andy Oram. Sarah Burcham merece agradecimentos especiais por me dar a oportunidade de escrever este livro e por suas contribuições à seção Ferramentas Shell. Mais agradecimentos pelas contribuições e revisões técnicas de Jeffrey Friedl, Philip Hazel, Steve Friedl, Ola Bini, Ian Darwin, Zak Greant, Ron Hitchens, A.M. Kuchling, Tim Allwine, Schuyler Erle, David Lents, Rabble, Rich Bowan, Eric Eisenhart e Brad Merrill. Introdução a Expressões Regulares e Casamento de Padrões Uma expressão regular é uma string que contém uma combinação de caracteres normais e metacaracteres ou metaseqüências especiais. Os caracteres normais combinam entre si. Os metacaracteres e os metaseqüências são caracteres ou seqüências de caracteres que representam idéias como quantidade, posições ou tipos de caracteres. A lista em Construções, Modos e Metacaracteres de Expressões Regulares mostra os metacaracteres e as metaseqüências mais comuns no mundo de expressões regulares. Seções posteriores listam a disponibilidade e a X Guia de Bolso: Expressões Regulares
sintaxe para suporte de metacaracteres para implementações particulares de expressões regulares. O Casamento de padrões consiste em encontrar uma seção de texto que é descrita (combinada) por uma expressão regular. O código subjacente que pesquisa o texto é o mecanismo de expressão regular. É possível prever os resultados da maioria das combinações mantendo duas regras em mente: 1. A combinação mais precoce (mais à esquerda) vence As expressões regulares são aplicadas à entrada que começa no primeiro caractere e prossegue até o último. Assim que o mecanismo de expressões regulares encontra uma combinação, esta então retorna. (Veja MRE 148 149.) 2. Os quantificadores padrões são vorazes Os quantificadores especificam quantas vezes algo pode ser repetido. Os quantificadores padrões tentam combinar o tanto quanto possível. Estabelecem-se para menos, ao invés do máximo, somente se for necessário para o sucesso da combinação. O processo de abandonar caracteres e tentar combinações menos vorazes é chamado de retrocesso. (Veja MRE 151 153.) Os mecanismos de expressões regulares têm diferenças baseadas em seu tipo. Há duas classes de mecanismos: Autômato Finito Determinista (DFA) e Autômato Finito Não Determinista (NFA). DFAs são mais rápidos, mas não têm muitas das funcionalidades de um NFA, como captura, pesquisa e quantificadores não-vorazes. No mundo do NFA existem dois tipos: tradicional e POSIX. Mecanismos de DFA Os DFAs comparam cada caractere da string de entrada para a expressão regular, mantendo o rastreamento de todas as combinações em progresso. Como cada caractere é examinado no máximo uma vez, o mecanismo de DFA é o mais rápido. Uma regra adicional a ser lembrada com DFAs é que a metaseqüência de alternação é voraz. Quando mais de uma opção em uma alternação (foo foobar) combina, a mais longa Guia de Bolso: Expressões Regulares XI