SlideShare uma empresa Scribd logo
Desmistificando
as Expressões
Regulares
Mário Guedes
O que é Expressão Regular?
É uma poderosa ferramenta para manipulação de texto.
“Tão simples quanto um comando de busca e tão
poderoso quanto uma linguagem de programação.”
Jeffrey E. F. Friedl
Seus conceitos remontam a década de 40, em um estudo
sobre o funcionamento dos neurônios.
Para que serve a Expressão Regular?
Há vários usos possíveis, sendo alguns exemplos:
• Validação de entrada
– e-Mail
– Endereço IP
– URL
– Data
– Telefone
• Análise de log
• Validação de estrutura XML
• Busca e substituição de texto
A Expressão Regular está mais próxima do
que você imagina!
Várias ferramentas oferecem o uso da Expressão Regular
para localização e substituição de texto, inclusive o
Delphi.
Expressão Regular é simples!
• Para aplicar uma Expressão Regular, precisamos de três
elementos:
– O padrão a ser buscado, que é a Expressão Regular
propriamente dita;
– O texto a ser analisado, que basicamente é uma string, com
ou sem quebra de linhas;
– Os modificadores, que são sinalizações para a máquina
RegEx, que influencia no comportamento dela.
Match: Combinação
• O objetivo de se aplicar uma Expressão Regular a um
texto é justamente verificar as combinações;
• Um texto pode conter várias combinações;
• Uma combinação pode ter vários grupos;
A Expressão Regular
As Expressões Regulares são montadas a partir de
pequenas unidades de blocos de montagens:
• Meta-caractere – São os caracteres com funções
especiais dentro da Expressão Regular
• Caractere literal – Não tem função especial na
Expressão Regular
Modificadores
• Podemos modificar o comportamento da máquina da
Expressão Regular com os modificadores.
Modificador Aplicação
roNone Sem utilização prática
roIgnoreCase Ignora maiúscula e minúscula
roMultiLine Indica ao mecanismo que a string possui várias linhas,
influenciando no resultado do ^ e $
roExplicitCapture Os grupos somente serão capturados se forem nomeados
roCompiled Agiliza futuras pesquisas
roSingleLine Indica ao mecanismo para tratar a string como uma linha
só, influenciando na combinação do ponto, que passa a
considerar o #13
roIgnorePatternSpace Na prática, habilita comentários na Expressão Regular
Usando tudo isto no Delphi
• O verdadeiro poder da RegEx se mostra quando usado
em conjunto com uma liguagem hospedeira;
• Desde o Delphi XE está disponível a unit
RegularExpressions, que contêm os tipos necessários
para tirar proveito das Expressões Regulares;
• Pertence ao “sabor” PCRE: Expressão Regular
compatível com Perl;
• Para as versões anteriores do Delphi, é possível usar
uma biblioteca disponível em:
http://www.regular-expressions.info/delphi.html
Tipo TRegEx
• TRegEx é um record e não uma classe;
• Contêm os métodos para a aplicação de uma Expressão
Regular em uma string;
• Os métodos mais usuais são:
– IsMatch
– Match
– Matches
– Replace
TRegEx.IsMatch
• É o método mais direto, útil para validações simples.
Input: Texto
a ser
analisado
Pattern: A
RegEx a ser
aplicada
Options:
Conjunto de
modificadores
TRegEx.Replace
• Substitui os trechos combinados com a Expressão
Regular por um outro texto.
Input: Texto a
ser analisado
Pattern: A
RegEx a ser
aplicada
Replacement:
Texto que
substituirá
Options:
Conjunto de
modificadores
Dica:
• Interprete a RegEx de uma forma literal.
• Início de linha, seguido por
• X, seguido por,
• E, seguido por,
• 2
^XE2
Os meta-caracteres
• A seguir, será mostrado várias possibilidades na
construção de uma Expressão Regular;
• Apesar de ser bem abrangente não encerra o assunto.
A Expressão Regular é um aprendizado constante;
• Espero que dê tempo e que você não durma... 
Os meta-caracteres
• Os meta-caracteres se classificam em:
– Representantes – representam algum caractere, como o
ponto ou a lista [...];
– Quantificadores – determinam a quantidade de ocorrências
de um átomo da RegEx, como o asterisco;
– Âncoras – combinam com uma posição na string, como o
circunflexo e o cifrão;
– Outros – funcionalidades diversas;
Escape: 
• Escapa, ou seja, anula um meta-caractere, tornando-o
um caractere literal;
• Também é usado em conjunto com caracteres literais,
gerando meta-strings com funções especiais;
www.
 Caractere w, seguido por,
 w, seguido por,
 w, seguido por,
 Caractere ponto literal
w w w . e m b a r c a d e r o . c o m / b r /
#
1
3
#
1
0
w w w w
Início de linha: ^
• Combina com o início de uma linha;
• Observe o uso dos modificadores roMultiLine e
roSingleLine
^.
 Início de linha, seguido por
 Qualquer caractere
L i n h a 1
#
1
3
#
1
0
L i n h a 2
#
1
3
#
1
0
L i n h a 3 roMultiLine
L i n h a 1
#
1
3
#
1
0
L i n h a 2
#
1
3
#
1
0
L i n h a 3 roSingleLine
Fim de linha: $
• Combina com o fim de uma linha;
• Observe o uso dos modificadores roMultiLine e
roSingleLine
L i n h a 1
#
1
3
#
1
0
L i n h a 2
#
1
3
#
1
0
L i n h a 3
.$
 Qualquer caractere, seguido por,
 Fim de linha
roMultiLine
L i n h a 1
#
1
3
#
1
0
L i n h a 2
#
1
3
#
1
0
L i n h a 3 roSingleLine
Classe de caracteres: [ ]
• Cria uma classe, ou uma lista de caracteres possíveis
em uma posição
X 1 N O N
#
1
3
#
1
0
X 2 A B C
#
1
3
#
1
0
X 5 X X X
 X Literal, seguido por,
 Caractere 1, ou 2, ou 3
X[123]
Classe com intervalo: [-]
• Determina um intervalo de caracteres (tabela ASCII);
• Único momento em que o traço é um meta-caractere,
desde que não seja o primeiro e nem seja precedido
por um circunflexo;
X[5-9]
X 1 N O N
#
1
3
#
1
0
X 2 A B C
#
1
3
#
1
0
X 5 X X X
 X Literal, seguido por
 Qualquer caractere que esteja entre
o 5 e o 9
Classe negada: [^]
• Contêm a lista de caracteres que não pode conter em
determinada posição.
• O circunflexo deve ser o primeiro item da lista para ter
esta funcionalidade.
X[^5-9]
X 1 N O N
#
1
3
#
1
0
X 2 A B C
#
1
3
#
1
0
X 5 X X X
• X Literal, seguido por
• Qualquer caractere que não esteja
entre o 5 e o 9
Qualquer caractere: .
• É uma abreviação de classe de caracteres que combina
com qualquer caractere, inclusive os não imprimíveis.
• Observe a influência do modificador roSingleLine
.
 Qualquer caractere
X 1 N O N
#
1
3
#
1
0
X 2 A B C
#
1
3
#
1
0
X 5 X X X
X 1 N O N
#
1
3
#
1
0
X 2 A B C
#
1
3
#
1
0
X 5 X X X COM roSingleLine
SEM roSingleLine
Pipe: |
• Permite alternância, podendo haver tantas quantas
forem necessárias.
CPF|RG
 C , seguido por
 P, seguido por
 F
 OU
 R, seguido por
 G
R G : 9 9 9 9 9 9 9 9 C P F : 0 0 0 0 0 0 0 0
Quantificador opcional: ?
• Torna opcional a existência do elemento predecessor;
• Pode existir ou não o caractere predecessor
XE2?
 Caractere X, seguido por,
 Caractere E, seguido ou não por uma
ocorrência do
 Caractere 2
O D e l p h i X E 2 é o s u c e s s o r d o X E !
Quantificador de repetição: +
• Tem que existir no mínimo uma ocorrência do
elemento predecessor;
$[0-9]+
• Cifrão literal, seguido por
• Caractere de 0 à 9, com uma
ocorrência no mínimo
V a l o r : $ 1 0 0 $ $ $ P R O M O Ç Ã O $ $ $
Quantificador de repetição opcional: *
• O elemento predecessor pode não existir, ou existir em
qualquer quantidade;
<B[ ]*>
O < B > D e l p h i < / B > é a m e l h o r < B > I D E < / B >
• Sinal de menor, seguido por
• B literal, seguido por
• Espaço em qualquer
quantidade, inclusive nenhum,
seguido por
• Sinal de maior
Quantificador de intervalo: {min, max}
• Determina uma quantidade exata ou uma quantidade
mínima e máxima de ocorrências do elemento
predecessor;
10{2,3}
V a l o r : 1 0 V a l o r : 1 0 0 V a l o r : 1 0 0 0 V a l o r : 1 0
• Caractere 1, seguido pelo,
• Caractere 0 com duas à três
ocorrências
Agrupamento: (RegEx)
• O agrupamento é o elemento mais versátil, podendo
assumir várias funcionalidades.
• A utilização básica é:
(XE2)
O D e l p h i X E 2 e s t a f a n t á s t i c o ! ! !
• Agrupamento:
• Caractere X, seguido por,
• Caractere E, seguido por,
• Caractere 2
Agrupamento com alternância:
(opção|opção)
• O agrupamento pode ser utilizado para limitar o escopo
de uma alternância.
DELPHI[ ](XE|XE2)
O D e l p h i X E 2 c o m p i l a p a r a 6 4 b i t s !
• Caractere D seguido por,
• E, L, P, H, I, seguido por,
• Caractere de espaço,
seguido por:
• Agrupamento:
• X, seguido por,
• E
• OU
• X, seguido por,
• E, seguido por,
• 2
Agrupamento com quantificador:
(RegEx)quantificador
• Agrupa múltiplos caracteres em unidades maiores,
possibilitando o uso de um quantificador;
• Note que o em caso de alternância é considerado a
RegEx e não a combinação.
1(.000){2}
P r ê m i o : 1 . 0 0 0 . 0 0 0 P r ê m i o : 1 . 0 0 0
• Caractere 1 literal, seguido por,
• Duas ocorrências do agrupamento:
• Ponto literal, seguido por,
• 0, seguido por,
• 0, seguido por,
• 0
Agrupamento de captura: n
• Um agrupamento pode ser referenciado mais à direita
na expressão regular, pois o agrupamento “captura” a
combinação.
• Na RegEx podem ser feita 9 referências (de 1 a 9)
^(w*)-1
a r a r a - a z u l
#
1
3
#
1
0
t i c o - t i c o
#
1
3
#
1
0
b e i j a - f l o r
#
1
3
#
1
0
• Início de linha, seguido por,
• Agrupamento:
• Qualquer caractere alfanumérico em
qualquer quantidade;
• Caractere de hífen literal, seguido por,
• Combinação do grupo 1
Meta-strings:
• Meta-strings são caracteres literais precedidos pela
barra invertida.
• Alguns poucos exemplos:
Meta-string Significado ASCII
t Caractere de tabulação #09
n Caractere de quebra de linha #13
r Caractere de retorno de carro #10
f Caractere de nova página #12
Abreviações de classes de caracteres
• Já são previstas algumas classes de caracteres, onde
temos as seguintes abreviações de classes:
Abreviação Abrangência Equivalência
d Todos os caracteres numéricos [0-9]
D Todos os caracteres não numéricos [A-Za-z ...]
s Todos os caracteres não-imprimíveis [tnr ...]
S Todos os caracteres imprimíveis [A-Za-z0-9 ...]
w Todos os caracteres que pode
compor uma palavra
[a-zA-Z0-9_]
W Todos os caracteres que não podem
compor uma palavra
[!@#$% ...]
Meta-strings de âncoras de limite de palavra
• Marca uma posição imediatamente posterior ou
anterior a um caractere de palavra;
• O B combina com uma posição que não é limite de
palavra.
bw*b
C o l u n a 1 C o l u n a 2 C o l u n a 3 C o l u n a 4
• Limite de palavra, seguido por
• Qualquer caractere imprimível em
qualquer quantidade, seguido por
• Limite de palvra
Meta-string de âncora de início e fim de
string
• Para se referir ao início ou a fim da string (independe-
mente da existência de quebra de linha) temos as
seguintes meta-strings:
Meta-string Significado
A Início da string
Z Fim da string
z Fim da linha
Considerações importantes
• Conhecer bem o texto alvo nos permite moldar uma
RegEx mais eficiente;
• Quanto mais específica a RegEx maior a confiabilidade
do resultado;
O que não deu tempo de mostrar?
• Soluções relacionadas com UNICODE;
• Problemática dos quantificadores:
– Gananciosos;
– Preguiçosos;
– Possessivos;
• Modificadores de grupo;
• Funcionamento da máquina RegEx;
• Considerações sobre performance;
Perguntas?
• Referências
– JARGAS, Aurélio Marinho. Expressões Regulares: Uma
Abordagem Divertida. Novatec Editora.
– FRIEDL, Jeffrey E. F. Dominando Expressões Regulares. Alta
Books Editora.
– GOYVAERTS, Jan; LEVITHAN, Steven. Expressões Regulares
Cookbook . Novatec Editora.
– http://www.regular-expressions.info/
• A palestra continua em:
http://eugostododelphi.blogspot.com/p/expressao-
regular.html
• EDN – Embarcadero Developer Network
– http://edn.embarcadero.com/br
Obrigado
• José Mário Silva Guedes
– www.tdstecnologiasp.com.br
– jmarioguedes@gmail.com
– @jmarioguedes
• eugostododelphi.blogspot.com
– @eugostododelphi

Mais conteúdo relacionado

Destaque

Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Mario Guedes
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
Andreano Lanusse
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
Mario Guedes
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
Mario Guedes
 
DUnitX - Novo Framework de Testes unitários para Delphi
DUnitX - Novo Framework de Testes unitários para DelphiDUnitX - Novo Framework de Testes unitários para Delphi
DUnitX - Novo Framework de Testes unitários para Delphi
Renan Frutuozo
 
New features of SQL in Firebird
New features of SQL in FirebirdNew features of SQL in Firebird
New features of SQL in Firebird
Mind The Firebird
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
Mario Guedes
 
Minicurso de Expressões Regulares
Minicurso de Expressões RegularesMinicurso de Expressões Regulares
Minicurso de Expressões Regulares
André Willik Valenti
 
Exploring FireDAC
Exploring FireDACExploring FireDAC
Exploring FireDAC
Kelver Merlotti
 
REST Servers in Delphi XE Using DataSnap
REST Servers in Delphi XE Using DataSnapREST Servers in Delphi XE Using DataSnap
REST Servers in Delphi XE Using DataSnap
Embarcadero Technologies
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Mario Guedes
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Mario Guedes
 
Delphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no CódigoDelphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no Código
José Araújo
 
Fortes Papo Developer
Fortes Papo DeveloperFortes Papo Developer
Fortes Papo Developer
José Araújo
 
Delphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaDelphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração Contínua
José Araújo
 
Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de Dados
José Araújo
 
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
José Araújo
 
Gnostice Suporte completo a PDF e Office - Embarcadero Conference 2015
Gnostice Suporte completo a PDF e Office �- Embarcadero Conference 2015Gnostice Suporte completo a PDF e Office �- Embarcadero Conference 2015
Gnostice Suporte completo a PDF e Office - Embarcadero Conference 2015
Vic Fernandes
 
Git & Delphi
Git & DelphiGit & Delphi
Git & Delphi
Warlley Rezende
 

Destaque (20)

Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
DUnitX - Novo Framework de Testes unitários para Delphi
DUnitX - Novo Framework de Testes unitários para DelphiDUnitX - Novo Framework de Testes unitários para Delphi
DUnitX - Novo Framework de Testes unitários para Delphi
 
New features of SQL in Firebird
New features of SQL in FirebirdNew features of SQL in Firebird
New features of SQL in Firebird
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Minicurso de Expressões Regulares
Minicurso de Expressões RegularesMinicurso de Expressões Regulares
Minicurso de Expressões Regulares
 
Exploring FireDAC
Exploring FireDACExploring FireDAC
Exploring FireDAC
 
REST Servers in Delphi XE Using DataSnap
REST Servers in Delphi XE Using DataSnapREST Servers in Delphi XE Using DataSnap
REST Servers in Delphi XE Using DataSnap
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTIDelphi Conference 2012 - Programação Baseado em Regras com RTTI
Delphi Conference 2012 - Programação Baseado em Regras com RTTI
 
Delphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no CódigoDelphi Conference 2012 - Qualidade no Código
Delphi Conference 2012 - Qualidade no Código
 
Fortes Papo Developer
Fortes Papo DeveloperFortes Papo Developer
Fortes Papo Developer
 
Delphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração ContínuaDelphi Conference 2011 - Integração Contínua
Delphi Conference 2011 - Integração Contínua
 
Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de Dados
 
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
9º FireBird Developer Day - Automatizar Manutenção do Banco de Dados
 
Gnostice Suporte completo a PDF e Office - Embarcadero Conference 2015
Gnostice Suporte completo a PDF e Office �- Embarcadero Conference 2015Gnostice Suporte completo a PDF e Office �- Embarcadero Conference 2015
Gnostice Suporte completo a PDF e Office - Embarcadero Conference 2015
 
Mvc delphi
Mvc delphiMvc delphi
Mvc delphi
 
Git & Delphi
Git & DelphiGit & Delphi
Git & Delphi
 

Semelhante a Delphi Conference 2011 - Desmistificando as Expressões Regulares

Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
Danilo Pinotti
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
Fabio Moura Pereira
 
PHP
PHPPHP
Aprendendo PHP.pdf
Aprendendo PHP.pdfAprendendo PHP.pdf
Aprendendo PHP.pdf
ssuserad6350
 
Regex
RegexRegex
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
Marcelo Barros de Almeida
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
Leonardo Melo Santos
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
Giancarlo Silva
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
Wesley R. Bezerra
 
Elixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistérioElixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistério
Alex Ferreira
 
Java Básico
Java BásicoJava Básico
Java Básico
Wesley R. Bezerra
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBALuciano Borges
 
Algoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxAlgoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docx
LdiaSilva39
 
Python: Funcionalidades Básicas
Python: Funcionalidades BásicasPython: Funcionalidades Básicas
Python: Funcionalidades Básicas
eurosigdoc acm
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
Zarathon Maia
 
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textualPGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQL
Juliano Atanazio
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
Maurício Moreira Neto
 

Semelhante a Delphi Conference 2011 - Desmistificando as Expressões Regulares (20)

Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 
PHP
PHPPHP
PHP
 
Aprendendo PHP.pdf
Aprendendo PHP.pdfAprendendo PHP.pdf
Aprendendo PHP.pdf
 
Regex
RegexRegex
Regex
 
Introdução a Python
Introdução a PythonIntrodução a Python
Introdução a Python
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#Curso de OO com C# - Parte 02 - Introdução ao C#
Curso de OO com C# - Parte 02 - Introdução ao C#
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: Introdução
 
Elixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistérioElixir - o que existe atrás do mistério
Elixir - o que existe atrás do mistério
 
Java Básico
Java BásicoJava Básico
Java Básico
 
Apresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBAApresentação Ruby no Dojo da UFBA
Apresentação Ruby no Dojo da UFBA
 
Algoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docxAlgoritmo e Complexidade - texto Aula1.docx
Algoritmo e Complexidade - texto Aula1.docx
 
Python: Funcionalidades Básicas
Python: Funcionalidades BásicasPython: Funcionalidades Básicas
Python: Funcionalidades Básicas
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textualPGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
PGDay Campinas 2013 - Como Full Text Search pode ajudar na busca textual
 
Full Text Search - Busca Textual no PostgreSQL
Full Text Search -  Busca Textual no PostgreSQLFull Text Search -  Busca Textual no PostgreSQL
Full Text Search - Busca Textual no PostgreSQL
 
TWP05 Variáveis e Entrada de Dados
TWP05 Variáveis e Entrada de DadosTWP05 Variáveis e Entrada de Dados
TWP05 Variáveis e Entrada de Dados
 
Aula de C e C++
Aula de C e C++Aula de C e C++
Aula de C e C++
 

Mais de Mario Guedes

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST Summit
Mario Guedes
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
Mario Guedes
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da Ethereum
Mario Guedes
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
Mario Guedes
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - Cookbook
Mario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
Mario Guedes
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
Mario Guedes
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
Mario Guedes
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Mario Guedes
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis
Mario Guedes
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e Redis
Mario Guedes
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
Mario Guedes
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
Mario Guedes
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
Mario Guedes
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Mario Guedes
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
Mario Guedes
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?
Mario Guedes
 
BOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaBOT: Conversando com o seu sistema
BOT: Conversando com o seu sistema
Mario Guedes
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Mario Guedes
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Mario Guedes
 

Mais de Mario Guedes (20)

O que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST SummitO que é e como devo usar o REDIS? - 1o Mobile REST Summit
O que é e como devo usar o REDIS? - 1o Mobile REST Summit
 
Fazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDISFazendo barba, cabelo e bigode com REDIS
Fazendo barba, cabelo e bigode com REDIS
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da Ethereum
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - Cookbook
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
Geolocalização com Redis e Google Maps
Geolocalização com Redis e Google MapsGeolocalização com Redis e Google Maps
Geolocalização com Redis e Google Maps
 
Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!Paralelismo na prática: Threads de uma vez por todas e sem medo!
Paralelismo na prática: Threads de uma vez por todas e sem medo!
 
Escalabilidade com Redis
Escalabilidade com Redis Escalabilidade com Redis
Escalabilidade com Redis
 
Escalando o backend com NGINX e Redis
Escalando o backend com NGINX e RedisEscalando o backend com NGINX e Redis
Escalando o backend com NGINX e Redis
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
 
Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?Microsserviço, Escalabilidade e Resiliência - #comofas?
Microsserviço, Escalabilidade e Resiliência - #comofas?
 
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no DelphiTDCSP - 2018 - Possibilidades com o REDIS no Delphi
TDCSP - 2018 - Possibilidades com o REDIS no Delphi
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
 
Extreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe DelphiExtreme Experience 2018 | Python para quem sabe Delphi
Extreme Experience 2018 | Python para quem sabe Delphi
 
Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?Intensive Delphi 2017 - E este tal de Redis hein?
Intensive Delphi 2017 - E este tal de Redis hein?
 
BOT: Conversando com o seu sistema
BOT: Conversando com o seu sistemaBOT: Conversando com o seu sistema
BOT: Conversando com o seu sistema
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
 
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuáriosExtreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
Extreme 360º 2017 | Arquitetura Extrema: Rumo aos 10.000 usuários
 

Delphi Conference 2011 - Desmistificando as Expressões Regulares

  • 2. O que é Expressão Regular? É uma poderosa ferramenta para manipulação de texto. “Tão simples quanto um comando de busca e tão poderoso quanto uma linguagem de programação.” Jeffrey E. F. Friedl Seus conceitos remontam a década de 40, em um estudo sobre o funcionamento dos neurônios.
  • 3. Para que serve a Expressão Regular? Há vários usos possíveis, sendo alguns exemplos: • Validação de entrada – e-Mail – Endereço IP – URL – Data – Telefone • Análise de log • Validação de estrutura XML • Busca e substituição de texto
  • 4. A Expressão Regular está mais próxima do que você imagina! Várias ferramentas oferecem o uso da Expressão Regular para localização e substituição de texto, inclusive o Delphi.
  • 5. Expressão Regular é simples! • Para aplicar uma Expressão Regular, precisamos de três elementos: – O padrão a ser buscado, que é a Expressão Regular propriamente dita; – O texto a ser analisado, que basicamente é uma string, com ou sem quebra de linhas; – Os modificadores, que são sinalizações para a máquina RegEx, que influencia no comportamento dela.
  • 6. Match: Combinação • O objetivo de se aplicar uma Expressão Regular a um texto é justamente verificar as combinações; • Um texto pode conter várias combinações; • Uma combinação pode ter vários grupos;
  • 7. A Expressão Regular As Expressões Regulares são montadas a partir de pequenas unidades de blocos de montagens: • Meta-caractere – São os caracteres com funções especiais dentro da Expressão Regular • Caractere literal – Não tem função especial na Expressão Regular
  • 8. Modificadores • Podemos modificar o comportamento da máquina da Expressão Regular com os modificadores. Modificador Aplicação roNone Sem utilização prática roIgnoreCase Ignora maiúscula e minúscula roMultiLine Indica ao mecanismo que a string possui várias linhas, influenciando no resultado do ^ e $ roExplicitCapture Os grupos somente serão capturados se forem nomeados roCompiled Agiliza futuras pesquisas roSingleLine Indica ao mecanismo para tratar a string como uma linha só, influenciando na combinação do ponto, que passa a considerar o #13 roIgnorePatternSpace Na prática, habilita comentários na Expressão Regular
  • 9. Usando tudo isto no Delphi • O verdadeiro poder da RegEx se mostra quando usado em conjunto com uma liguagem hospedeira; • Desde o Delphi XE está disponível a unit RegularExpressions, que contêm os tipos necessários para tirar proveito das Expressões Regulares; • Pertence ao “sabor” PCRE: Expressão Regular compatível com Perl; • Para as versões anteriores do Delphi, é possível usar uma biblioteca disponível em: http://www.regular-expressions.info/delphi.html
  • 10. Tipo TRegEx • TRegEx é um record e não uma classe; • Contêm os métodos para a aplicação de uma Expressão Regular em uma string; • Os métodos mais usuais são: – IsMatch – Match – Matches – Replace
  • 11. TRegEx.IsMatch • É o método mais direto, útil para validações simples. Input: Texto a ser analisado Pattern: A RegEx a ser aplicada Options: Conjunto de modificadores
  • 12. TRegEx.Replace • Substitui os trechos combinados com a Expressão Regular por um outro texto. Input: Texto a ser analisado Pattern: A RegEx a ser aplicada Replacement: Texto que substituirá Options: Conjunto de modificadores
  • 13. Dica: • Interprete a RegEx de uma forma literal. • Início de linha, seguido por • X, seguido por, • E, seguido por, • 2 ^XE2
  • 14. Os meta-caracteres • A seguir, será mostrado várias possibilidades na construção de uma Expressão Regular; • Apesar de ser bem abrangente não encerra o assunto. A Expressão Regular é um aprendizado constante; • Espero que dê tempo e que você não durma... 
  • 15. Os meta-caracteres • Os meta-caracteres se classificam em: – Representantes – representam algum caractere, como o ponto ou a lista [...]; – Quantificadores – determinam a quantidade de ocorrências de um átomo da RegEx, como o asterisco; – Âncoras – combinam com uma posição na string, como o circunflexo e o cifrão; – Outros – funcionalidades diversas;
  • 16. Escape: • Escapa, ou seja, anula um meta-caractere, tornando-o um caractere literal; • Também é usado em conjunto com caracteres literais, gerando meta-strings com funções especiais; www.  Caractere w, seguido por,  w, seguido por,  w, seguido por,  Caractere ponto literal w w w . e m b a r c a d e r o . c o m / b r / # 1 3 # 1 0 w w w w
  • 17. Início de linha: ^ • Combina com o início de uma linha; • Observe o uso dos modificadores roMultiLine e roSingleLine ^.  Início de linha, seguido por  Qualquer caractere L i n h a 1 # 1 3 # 1 0 L i n h a 2 # 1 3 # 1 0 L i n h a 3 roMultiLine L i n h a 1 # 1 3 # 1 0 L i n h a 2 # 1 3 # 1 0 L i n h a 3 roSingleLine
  • 18. Fim de linha: $ • Combina com o fim de uma linha; • Observe o uso dos modificadores roMultiLine e roSingleLine L i n h a 1 # 1 3 # 1 0 L i n h a 2 # 1 3 # 1 0 L i n h a 3 .$  Qualquer caractere, seguido por,  Fim de linha roMultiLine L i n h a 1 # 1 3 # 1 0 L i n h a 2 # 1 3 # 1 0 L i n h a 3 roSingleLine
  • 19. Classe de caracteres: [ ] • Cria uma classe, ou uma lista de caracteres possíveis em uma posição X 1 N O N # 1 3 # 1 0 X 2 A B C # 1 3 # 1 0 X 5 X X X  X Literal, seguido por,  Caractere 1, ou 2, ou 3 X[123]
  • 20. Classe com intervalo: [-] • Determina um intervalo de caracteres (tabela ASCII); • Único momento em que o traço é um meta-caractere, desde que não seja o primeiro e nem seja precedido por um circunflexo; X[5-9] X 1 N O N # 1 3 # 1 0 X 2 A B C # 1 3 # 1 0 X 5 X X X  X Literal, seguido por  Qualquer caractere que esteja entre o 5 e o 9
  • 21. Classe negada: [^] • Contêm a lista de caracteres que não pode conter em determinada posição. • O circunflexo deve ser o primeiro item da lista para ter esta funcionalidade. X[^5-9] X 1 N O N # 1 3 # 1 0 X 2 A B C # 1 3 # 1 0 X 5 X X X • X Literal, seguido por • Qualquer caractere que não esteja entre o 5 e o 9
  • 22. Qualquer caractere: . • É uma abreviação de classe de caracteres que combina com qualquer caractere, inclusive os não imprimíveis. • Observe a influência do modificador roSingleLine .  Qualquer caractere X 1 N O N # 1 3 # 1 0 X 2 A B C # 1 3 # 1 0 X 5 X X X X 1 N O N # 1 3 # 1 0 X 2 A B C # 1 3 # 1 0 X 5 X X X COM roSingleLine SEM roSingleLine
  • 23. Pipe: | • Permite alternância, podendo haver tantas quantas forem necessárias. CPF|RG  C , seguido por  P, seguido por  F  OU  R, seguido por  G R G : 9 9 9 9 9 9 9 9 C P F : 0 0 0 0 0 0 0 0
  • 24. Quantificador opcional: ? • Torna opcional a existência do elemento predecessor; • Pode existir ou não o caractere predecessor XE2?  Caractere X, seguido por,  Caractere E, seguido ou não por uma ocorrência do  Caractere 2 O D e l p h i X E 2 é o s u c e s s o r d o X E !
  • 25. Quantificador de repetição: + • Tem que existir no mínimo uma ocorrência do elemento predecessor; $[0-9]+ • Cifrão literal, seguido por • Caractere de 0 à 9, com uma ocorrência no mínimo V a l o r : $ 1 0 0 $ $ $ P R O M O Ç Ã O $ $ $
  • 26. Quantificador de repetição opcional: * • O elemento predecessor pode não existir, ou existir em qualquer quantidade; <B[ ]*> O < B > D e l p h i < / B > é a m e l h o r < B > I D E < / B > • Sinal de menor, seguido por • B literal, seguido por • Espaço em qualquer quantidade, inclusive nenhum, seguido por • Sinal de maior
  • 27. Quantificador de intervalo: {min, max} • Determina uma quantidade exata ou uma quantidade mínima e máxima de ocorrências do elemento predecessor; 10{2,3} V a l o r : 1 0 V a l o r : 1 0 0 V a l o r : 1 0 0 0 V a l o r : 1 0 • Caractere 1, seguido pelo, • Caractere 0 com duas à três ocorrências
  • 28. Agrupamento: (RegEx) • O agrupamento é o elemento mais versátil, podendo assumir várias funcionalidades. • A utilização básica é: (XE2) O D e l p h i X E 2 e s t a f a n t á s t i c o ! ! ! • Agrupamento: • Caractere X, seguido por, • Caractere E, seguido por, • Caractere 2
  • 29. Agrupamento com alternância: (opção|opção) • O agrupamento pode ser utilizado para limitar o escopo de uma alternância. DELPHI[ ](XE|XE2) O D e l p h i X E 2 c o m p i l a p a r a 6 4 b i t s ! • Caractere D seguido por, • E, L, P, H, I, seguido por, • Caractere de espaço, seguido por: • Agrupamento: • X, seguido por, • E • OU • X, seguido por, • E, seguido por, • 2
  • 30. Agrupamento com quantificador: (RegEx)quantificador • Agrupa múltiplos caracteres em unidades maiores, possibilitando o uso de um quantificador; • Note que o em caso de alternância é considerado a RegEx e não a combinação. 1(.000){2} P r ê m i o : 1 . 0 0 0 . 0 0 0 P r ê m i o : 1 . 0 0 0 • Caractere 1 literal, seguido por, • Duas ocorrências do agrupamento: • Ponto literal, seguido por, • 0, seguido por, • 0, seguido por, • 0
  • 31. Agrupamento de captura: n • Um agrupamento pode ser referenciado mais à direita na expressão regular, pois o agrupamento “captura” a combinação. • Na RegEx podem ser feita 9 referências (de 1 a 9) ^(w*)-1 a r a r a - a z u l # 1 3 # 1 0 t i c o - t i c o # 1 3 # 1 0 b e i j a - f l o r # 1 3 # 1 0 • Início de linha, seguido por, • Agrupamento: • Qualquer caractere alfanumérico em qualquer quantidade; • Caractere de hífen literal, seguido por, • Combinação do grupo 1
  • 32. Meta-strings: • Meta-strings são caracteres literais precedidos pela barra invertida. • Alguns poucos exemplos: Meta-string Significado ASCII t Caractere de tabulação #09 n Caractere de quebra de linha #13 r Caractere de retorno de carro #10 f Caractere de nova página #12
  • 33. Abreviações de classes de caracteres • Já são previstas algumas classes de caracteres, onde temos as seguintes abreviações de classes: Abreviação Abrangência Equivalência d Todos os caracteres numéricos [0-9] D Todos os caracteres não numéricos [A-Za-z ...] s Todos os caracteres não-imprimíveis [tnr ...] S Todos os caracteres imprimíveis [A-Za-z0-9 ...] w Todos os caracteres que pode compor uma palavra [a-zA-Z0-9_] W Todos os caracteres que não podem compor uma palavra [!@#$% ...]
  • 34. Meta-strings de âncoras de limite de palavra • Marca uma posição imediatamente posterior ou anterior a um caractere de palavra; • O B combina com uma posição que não é limite de palavra. bw*b C o l u n a 1 C o l u n a 2 C o l u n a 3 C o l u n a 4 • Limite de palavra, seguido por • Qualquer caractere imprimível em qualquer quantidade, seguido por • Limite de palvra
  • 35. Meta-string de âncora de início e fim de string • Para se referir ao início ou a fim da string (independe- mente da existência de quebra de linha) temos as seguintes meta-strings: Meta-string Significado A Início da string Z Fim da string z Fim da linha
  • 36. Considerações importantes • Conhecer bem o texto alvo nos permite moldar uma RegEx mais eficiente; • Quanto mais específica a RegEx maior a confiabilidade do resultado;
  • 37. O que não deu tempo de mostrar? • Soluções relacionadas com UNICODE; • Problemática dos quantificadores: – Gananciosos; – Preguiçosos; – Possessivos; • Modificadores de grupo; • Funcionamento da máquina RegEx; • Considerações sobre performance;
  • 38. Perguntas? • Referências – JARGAS, Aurélio Marinho. Expressões Regulares: Uma Abordagem Divertida. Novatec Editora. – FRIEDL, Jeffrey E. F. Dominando Expressões Regulares. Alta Books Editora. – GOYVAERTS, Jan; LEVITHAN, Steven. Expressões Regulares Cookbook . Novatec Editora. – http://www.regular-expressions.info/ • A palestra continua em: http://eugostododelphi.blogspot.com/p/expressao- regular.html • EDN – Embarcadero Developer Network – http://edn.embarcadero.com/br
  • 39. Obrigado • José Mário Silva Guedes – www.tdstecnologiasp.com.br – jmarioguedes@gmail.com – @jmarioguedes • eugostododelphi.blogspot.com – @eugostododelphi