Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Casamento com Expressões Regulares
1. Casamento com Expressões Regulares
Alisson G. Chiquitto
Developers Paraná
chiquitto@gmail.com
14 de setembro de 2016
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 1 / 57
4. Termo: Regular
Regular?
”Que está de acordo com as regras, as normas, o costume;
normal.” (Michaelis Online)
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 3 / 57
5. Padrões de strings
Datas: dd/MM/YYYY;
Hora: hh:mm:ss;
CPF: 000.000.000-00;
CNPJ: 000.000.000/0000-00;
Números de telefone: (00) 00000-0000;
Senhas: Mínimo de 6 caracteres;
Email: nome@dominio.com.br;
MD5: 32 caracteres hexadecimais;
Caminhos de arquivo: /home/user/apresentacao.pdf;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 4 / 57
6. Padrões de strings
Binário: Sequência de 0 e 1;
XML/HTML: <tag>conteudo</tag>;
IP: 000.000.000.000;
MAC: 00:00:00:00:00:00;
CEP: 00.000-000;
Tipo Sanguíneo: O+, O-, A+, A-, B+, B-, AB+, AB-;
Cores hexadecimais: 3 pares de hexadecimais (#FFFFFF);
Placa de veículos: 3 letras + 4 dígitos;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 5 / 57
7. Padrões de strings
Endereço de entrega
Exemplo:
Rua Torre de Belém, 1000, Ap 101, Vila Roque, São Paulo/SP, 02472-035
Avenida Brasil, 3000, Centro, Cianorte/PR, 87200-000
Praça José Borges do Vale, s/n, Icozeira, Abaré/BA, Icozeira
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 6 / 57
8. Padrões de strings
Endereço de entrega
Exemplo:
Rua Torre de Belém, 1000, Ap 101, Vila Roque, São Paulo/SP, 02472-035
Avenida Brasil, 3000, Centro, Cianorte/PR, 87200-000
Praça José Borges do Vale, s/n, Icozeira, Abaré/BA, Icozeira
Padrão:
[tipo de logradouro] [logradouro], [número], [complemento], [bairro],
[cidade]/[uf], [cep]
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 6 / 57
9. Padrões de strings
Números no JSON
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 7 / 57
13. Expressões Regulares
Definições
”Uma string especialmente codificada que, quando usada (...) pode
corresponder a outras strings.” - Fitzgerald, Michael
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 9 / 57
14. Expressões Regulares
Definições
”Uma string especialmente codificada que, quando usada (...) pode
corresponder a outras strings.” - Fitzgerald, Michael
”Uma expressão regular é um método formal de se especificar um
padrão de texto.” - Jargas, Aurélio Marinho
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 9 / 57
20. Caracteres no regex
Cada caractere em uma expressão regular pode ser de dois tipos:
Metacaractere
Tem um significado específico dentro da regex;
Literal
Significa ele próprio;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 12 / 57
23. Qualquer caractere: Ponto
O caractere ponto vai casar com (apenas) 1 caractere qualquer.
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 14 / 57
24. Qualquer caractere: Ponto
A expressão:
a.a
Casa com:
aba aBa a5a a-a f ada b ana na
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 14 / 57
25. Lista de caracteres
”Mais restrito do que o Ponto (.), a lista é um conjunto de caracteres
restrito.”
Exemplos:
[aeiou] lista de vogais;
[01] números do conjunto binário;
[a-z] letras do alfabeto;
[0123456789] números do conjunto decimal;
[0-9] números do conjunto decimal;
[0123456789abcdef] números do conjunto hexadecimal;
[0-9a-f] números do conjunto hexadecimal;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 15 / 57
26. Lista de caracteres
A expressão:
d[aeiou]d[aeiou]
Casa com:
dado dedo dida
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 16 / 57
27. Lista de caracteres com intervalos
A expressão:
b[a-z]c
Casa com:
bbc bec o boc a
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 17 / 57
28. Lista de caracteres com intervalos
A expressão:
[0-9a-f][0-9a-f]
Casa com:
00 7f ff
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 18 / 57
29. Exemplo
Validação de endereço MAC
A expressão:
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]
Casa com:
Meu endereço MAC é 00:00:00:00:00:00
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 19 / 57
30. Exemplo
Validação de número telefonico
A expressão:
([0-9][0-9])[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]
Casa com:
Fone: (44)91234-5678
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 20 / 57
31. Exemplo
Validação de número de CEP
A expressão:
[0-9][0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]
Casa com:
CEP de Cianorte: 87200-163
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 21 / 57
33. Tanto faz: 0 ou mais
A expressão:
a∗
Casa com:
a
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 23 / 57
34. Tanto faz: 0 ou mais
A expressão:
a∗
Casa com:
aa
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 23 / 57
35. Tanto faz: 0 ou mais
A expressão:
a∗
Casa com:
aaa
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 23 / 57
36. Tanto faz: 0 ou mais
A expressão:
a[a-z]∗c
Casa com:
ac ordo
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 24 / 57
37. Tanto faz: 0 ou mais
A expressão:
a[a-z]∗c
Casa com:
agropec uaria
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 24 / 57
38. Tanto faz: 0 ou mais
A expressão:
a[a-z]∗c
Casa com:
fin anc eiro
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 24 / 57
39. Opcional: 0 ou 1
A expressão:
ae?a
Casa com:
aa
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 25 / 57
40. Opcional: 0 ou 1
A expressão:
ae?a
Casa com:
aea
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 25 / 57
41. Opcional: 0 ou 1
A expressão:
a[a-z]?c
Casa com:
ac umula
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 26 / 57
42. Opcional: 0 ou 1
A expressão:
a[a-z]?c
Casa com:
b anc o
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 26 / 57
43. Opcional: 0 ou 1
A expressão:
a[a-z]?c
Casa com:
intern ac ional
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 26 / 57
44. Opcional: 0 ou 1
A expressão:
a[a-z]?c
Casa com:
fin anc eiro
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 26 / 57
45. Tem que ter: 1 ou mais
A expressão:
ab+c
Casa com:
abc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 27 / 57
46. Tem que ter: 1 ou mais
A expressão:
ab+c
Casa com:
abbc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 27 / 57
47. Tem que ter: 1 ou mais
A expressão:
ab+c
Casa com:
abbbc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 27 / 57
48. Tem que ter: 1 ou mais
A expressão:
a[a-z]+d
Casa com:
acord o
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 28 / 57
49. Tem que ter: 1 ou mais
A expressão:
a[a-z]+d
Casa com:
apresentand o
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 28 / 57
50. Tem que ter: 1 ou mais
A expressão:
a[a-z]+d
Casa com:
p assad o
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 28 / 57
51. Tem que ter: 1 ou mais
A expressão:
a[a-z]+d
Casa com:
atividad e
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 28 / 57
52. Tem que ter: 1 ou mais
Regex para nome
A expressão:
[A-Z][a-z]+
Casa com:
Chiquitto
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 29 / 57
53. Controle
Especifica exatamente quantas repetições consecutivas se espera de um
conjunto.
{m,n} m a n;
{m,} pelo menos m;
{0,n} até n;
{m} exatamente m;
{0,1} opcional (?);
{0,} tanto faz (∗);
{1,} tem que ter (+);
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 30 / 57
61. Exemplo
Validação de endereço MAC
A expressão:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}
Casa com:
Meu endereço MAC é 00:00:00:00:00:00
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 34 / 57
62. Exemplo
Validação de número telefonico
A expressão:
([0-9]{2})[0-9]{4,5}-[0-9]{4}
Casa com:
Fone: (44)91234-5678
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 35 / 57
63. Exemplo
Validação de número de CEP
A expressão:
[0-9]{5}-[0-9]{3}
Casa com:
CEP de Cianorte: 87200-163
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 36 / 57
69. Casamento de endereços físicos (MAC)
A expressão:
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]
Casa com:
00:e0:4c:02:fa:2b
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 40 / 57
70. Casamento de endereços físicos (MAC)
A expressão:
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:
[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]
Casa com:
00:e0:4c:02:fa:2b
A expressão:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}
Casa com:
00:e0:4c:02:fa:2b
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 40 / 57
71. Casamento de endereços físicos (MAC)
A expressão:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}
Casa com:
00:e0:4c:02:fa:2b
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 41 / 57
72. Casamento de endereços físicos (MAC)
A expressão:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}:
[0-9a-f]{2}:[0-9a-f]{2}:[0-9a-f]{2}
Casa com:
00:e0:4c:02:fa:2b
A expressão:
([0-9a-f]{2}:){5}[0-9a-f]{2}
Casa com:
00:e0:4c:02:fa:2b
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 41 / 57
73. Grupo de alternativas: OU
A expressão:
(super|hiper)mercado
Casa com:
supermercado hipermercado mercado
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 42 / 57
74. Grupo de alternativas: OU
A expressão:
(super|hiper)mercado
Casa com:
supermercado hipermercado mercado
A expressão:
(super|hiper)?mercado
Casa com:
supermercado hipermercado mercado
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 42 / 57
75. Retrovisor: Referência para trás
O retrovisor faz referência a uma string casada por um grupo.
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 43 / 57
76. Retrovisor: Referência para trás
A expressão:
([a-z]+)-1
Casa com:
quero-quero
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 44 / 57
77. Retrovisor: Referência para trás
A expressão:
([a-z]+)-1
Casa com:
tico-tico
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 44 / 57
78. Retrovisor: Referência para trás
A expressão:
([a-z]+)-1
Casa com:
reco-reco
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 44 / 57
79. Retrovisor: Referência para trás
A expressão:
([a-z]+)-1
Casa com:
pula-pula
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 44 / 57
80. Retrovisor: Referência para trás
A expressão:
((band)eira)nte 1 2a
Casa com:
bandeirante bandeira banda
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 45 / 57
81. Exemplo
Casamento com HTML
A expressão:
<([a-z]+)>.*</1>
Casa com:
Oi, meu nome é <strong>Goku</strong>
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 46 / 57
86. Gerar SQL de um CSV
var csv = "São Paulo;SPn";
csv += "Rio de Janeiro;RJ";
csv.replace(
/(.*);([A-Z]{2})/g,
"Insert Into cidade (uf,cidade) Values (’$2’, ’$1’);"
)
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 50 / 57
88. Livros
Expressões Regulares: Guia de Consulta Rápida - Jargas, Aurélio Marinho
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 52 / 57
89. Livros
Expressões Regulares: Uma Abordagem Divertida - Jargas, Aurélio Marinho
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 53 / 57
90. Livros
Introdução às Expressões Regulares - Fitzgerald, Michael
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 54 / 57
91. Referências I
Expressões Regulares - Guia de Consulta Rápida
http://aurelio.net/regex/guia/
Regular-Expressions.info
http://www.regular-expressions.info/
Expressões Regulares / Regular Expressions Tool
http://www.regexp.com.br/
Regular Expression 101 Tool
https://regex101.com/
Regex Crossword
https://regexcrossword.com/
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 55 / 57