SlideShare uma empresa Scribd logo
1 de 39
Baixar para ler offline
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

Mais procurados

Fundamentos de programación librería string C++
Fundamentos de programación librería string C++Fundamentos de programación librería string C++
Fundamentos de programación librería string C++Milton Nicolay
 
Machine Learning com Python e Scikit-learn
Machine Learning com Python e Scikit-learnMachine Learning com Python e Scikit-learn
Machine Learning com Python e Scikit-learnChristian Perone
 
Esquema E/R del Organigrama de una Empresa
Esquema E/R del Organigrama de una EmpresaEsquema E/R del Organigrama de una Empresa
Esquema E/R del Organigrama de una EmpresaJosé D Pluas
 
Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)Fredy Nicolas Moreno Puerto
 
Operaciones básicas utilizadas en álgebra relacional
Operaciones básicas utilizadas en álgebra relacionalOperaciones básicas utilizadas en álgebra relacional
Operaciones básicas utilizadas en álgebra relacionalLili Sanchez
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaElaine Cecília Gatto
 
Regular expressions
Regular expressionsRegular expressions
Regular expressionsRaj Gupta
 

Mais procurados (16)

Fundamentos de programación librería string C++
Fundamentos de programación librería string C++Fundamentos de programación librería string C++
Fundamentos de programación librería string C++
 
Ejemplo básico de CUP
Ejemplo básico de CUPEjemplo básico de CUP
Ejemplo básico de CUP
 
1 ejercicio mt.
1 ejercicio mt.1 ejercicio mt.
1 ejercicio mt.
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
Grafos
GrafosGrafos
Grafos
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Machine Learning com Python e Scikit-learn
Machine Learning com Python e Scikit-learnMachine Learning com Python e Scikit-learn
Machine Learning com Python e Scikit-learn
 
Linked list
Linked listLinked list
Linked list
 
Esquema E/R del Organigrama de una Empresa
Esquema E/R del Organigrama de una EmpresaEsquema E/R del Organigrama de una Empresa
Esquema E/R del Organigrama de una Empresa
 
Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)Paradigma Programación Orientada a Objetos (POO)
Paradigma Programación Orientada a Objetos (POO)
 
Lista Duplamente Encadeada
Lista Duplamente EncadeadaLista Duplamente Encadeada
Lista Duplamente Encadeada
 
Operaciones básicas utilizadas en álgebra relacional
Operaciones básicas utilizadas en álgebra relacionalOperaciones básicas utilizadas en álgebra relacional
Operaciones básicas utilizadas en álgebra relacional
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista Encadeada
 
Metodo quicksort
Metodo quicksortMetodo quicksort
Metodo quicksort
 
Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
Listas
ListasListas
Listas
 

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-endMario Guedes
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario 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 DelphiRenan Frutuozo
 
New features of SQL in Firebird
New features of SQL in FirebirdNew features of SQL in Firebird
New features of SQL in FirebirdMind The Firebird
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
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-ThreadMario 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 RTTIMario 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ódigoJosé Araújo
 
Fortes Papo Developer
Fortes Papo DeveloperFortes Papo Developer
Fortes Papo DeveloperJosé 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ínuaJosé Araújo
 
Curso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosCurso de Delphi - Banco de Dados
Curso de Delphi - Banco de DadosJosé 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 DadosJosé 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 2015Vic Fernandes
 

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
 
Aprendendo PHP.pdf
Aprendendo PHP.pdfAprendendo PHP.pdf
Aprendendo PHP.pdfssuserad6350
 
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 PythonGiancarlo Silva
 
Java Básico :: Introdução
Java Básico :: IntroduçãoJava Básico :: Introdução
Java Básico :: IntroduçãoWesley 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érioAlex Ferreira
 
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.docxLdiaSilva39
 
Python: Funcionalidades Básicas
Python: Funcionalidades BásicasPython: Funcionalidades Básicas
Python: Funcionalidades Básicaseurosigdoc acm
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
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 PostgreSQLJuliano Atanazio
 
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 textualPGDay Campinas
 

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
 
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
 
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
 
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 SummitMario 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 REDISMario Guedes
 
Integrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumIntegrando-se à Blockchain da Ethereum
Integrando-se à Blockchain da EthereumMario Guedes
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTMario Guedes
 
Expressão Regular - Cookbook
Expressão Regular - CookbookExpressão Regular - Cookbook
Expressão Regular - CookbookMario 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 MapsMario 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 MapsMario 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 RedisMario 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 DelphiMario 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 DelphiMario 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 sistemaMario 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áriosMario 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