Você está na página 1de 11

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