0
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 ...
Para que serve a Expressão Regular?
Há vários usos possíveis, sendo alguns exemplos:
• Validação de entrada
– e-Mail
– End...
A Expressão Regular está mais próxima do
que você imagina!
Várias ferramentas oferecem o uso da Expressão Regular
para loc...
Expressão Regular é simples!
• Para aplicar uma Expressão Regular, precisamos de três
elementos:
– O padrão a ser buscado,...
Match: Combinação
• O objetivo de se aplicar uma Expressão Regular a um
texto é justamente verificar as combinações;
• Um ...
A Expressão Regular
As Expressões Regulares são montadas a partir de
pequenas unidades de blocos de montagens:
• Meta-cara...
Modificadores
• Podemos modificar o comportamento da máquina da
Expressão Regular com os modificadores.
Modificador Aplica...
Usando tudo isto no Delphi
• O verdadeiro poder da RegEx se mostra quando usado
em conjunto com uma liguagem hospedeira;
•...
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 st...
TRegEx.IsMatch
• É o método mais direto, útil para validações simples.
Input: Texto
a ser
analisado
Pattern: A
RegEx a ser...
TRegEx.Replace
• Substitui os trechos combinados com a Expressão
Regular por um outro texto.
Input: Texto a
ser analisado
...
Dica:
• Interprete a RegEx de uma forma literal.
• Início de linha, seguido por
• X, seguido por,
• E, seguido por,
• 2
^X...
Os meta-caracteres
• A seguir, será mostrado várias possibilidades na
construção de uma Expressão Regular;
• Apesar de ser...
Os meta-caracteres
• Os meta-caracteres se classificam em:
– Representantes – representam algum caractere, como o
ponto ou...
Escape: 
• Escapa, ou seja, anula um meta-caractere, tornando-o
um caractere literal;
• Também é usado em conjunto com car...
Início de linha: ^
• Combina com o início de uma linha;
• Observe o uso dos modificadores roMultiLine e
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...
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...
Classe com intervalo: [-]
• Determina um intervalo de caracteres (tabela ASCII);
• Único momento em que o traço é um meta-...
Classe negada: [^]
• Contêm a lista de caracteres que não pode conter em
determinada posição.
• O circunflexo deve ser o p...
Qualquer caractere: .
• É uma abreviação de classe de caracteres que combina
com qualquer caractere, inclusive os não impr...
Pipe: |
• Permite alternância, podendo haver tantas quantas
forem necessárias.
CPF|RG
 C , seguido por
 P, seguido por
...
Quantificador opcional: ?
• Torna opcional a existência do elemento predecessor;
• Pode existir ou não o caractere predece...
Quantificador de repetição: +
• Tem que existir no mínimo uma ocorrência do
elemento predecessor;
$[0-9]+
• Cifrão literal...
Quantificador de repetição opcional: *
• O elemento predecessor pode não existir, ou existir em
qualquer quantidade;
<B[ ]...
Quantificador de intervalo: {min, max}
• Determina uma quantidade exata ou uma quantidade
mínima e máxima de ocorrências d...
Agrupamento: (RegEx)
• O agrupamento é o elemento mais versátil, podendo
assumir várias funcionalidades.
• A utilização bá...
Agrupamento com alternância:
(opção|opção)
• O agrupamento pode ser utilizado para limitar o escopo
de uma alternância.
DE...
Agrupamento com quantificador:
(RegEx)quantificador
• Agrupa múltiplos caracteres em unidades maiores,
possibilitando o us...
Agrupamento de captura: n
• Um agrupamento pode ser referenciado mais à direita
na expressão regular, pois o agrupamento “...
Meta-strings:
• Meta-strings são caracteres literais precedidos pela
barra invertida.
• Alguns poucos exemplos:
Meta-strin...
Abreviações de classes de caracteres
• Já são previstas algumas classes de caracteres, onde
temos as seguintes abreviações...
Meta-strings de âncoras de limite de palavra
• Marca uma posição imediatamente posterior ou
anterior a um caractere de pal...
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ê...
Considerações importantes
• Conhecer bem o texto alvo nos permite moldar uma
RegEx mais eficiente;
• Quanto mais específic...
O que não deu tempo de mostrar?
• Soluções relacionadas com UNICODE;
• Problemática dos quantificadores:
– Gananciosos;
– ...
Perguntas?
• Referências
– JARGAS, Aurélio Marinho. Expressões Regulares: Uma
Abordagem Divertida. Novatec Editora.
– FRIE...
Obrigado
• José Mário Silva Guedes
– www.tdstecnologiasp.com.br
– jmarioguedes@gmail.com
– @jmarioguedes
• eugostododelphi...
Upcoming SlideShare
Loading in...5
×

Delphi Conference 2011 - Desmistificando as Expressões Regulares

2,989

Published on

Slide de apoio à palestra sobre Expressões Regulares no Delphi.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,989
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
27
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Delphi Conference 2011 - Desmistificando as Expressões Regulares"

  1. 1. Desmistificando as Expressões Regulares Mário Guedes
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 13. Dica: • Interprete a RegEx de uma forma literal. • Início de linha, seguido por • X, seguido por, • E, seguido por, • 2 ^XE2
  14. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 39. Obrigado • José Mário Silva Guedes – www.tdstecnologiasp.com.br – jmarioguedes@gmail.com – @jmarioguedes • eugostododelphi.blogspot.com – @eugostododelphi
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×