Download - Casamento com Expressões Regulares
Casamento com Expressões Regulares
Alisson G. Chiquitto
Developers Paraná
14 de setembro de 2016
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 1 / 57
Introdução e Contextualização
Introdução e Contextualização
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 2 / 57
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
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
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: [email protected];MD5: 32 caracteres hexadecimais;Caminhos de arquivo: /home/user/apresentacao.pdf;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 4 / 57
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
Padrões de stringsEndereço de entrega
Exemplo:Rua Torre de Belém, 1000, Ap 101, Vila Roque, São Paulo/SP, 02472-035Avenida Brasil, 3000, Centro, Cianorte/PR, 87200-000Praç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
Padrões de stringsEndereço de entrega
Exemplo:Rua Torre de Belém, 1000, Ap 101, Vila Roque, São Paulo/SP, 02472-035Avenida Brasil, 3000, Centro, Cianorte/PR, 87200-000Praç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
Padrões de stringsNúmeros no JSON
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 7 / 57
Expressões RegularesObjetivos
Testar substrings;
Procurar substrings;Substituir substrings;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 8 / 57
Expressões RegularesObjetivos
Testar substrings;Procurar substrings;
Substituir substrings;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 8 / 57
Expressões RegularesObjetivos
Testar substrings;Procurar substrings;Substituir substrings;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 8 / 57
Expressões RegularesDefinições
”Uma string especialmente codificada que, quando usada (...) podecorresponder a outras strings.” - Fitzgerald, Michael
”Uma expressão regular é um método formal de se especificar umpadrão de texto.” - Jargas, Aurélio Marinho
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 9 / 57
Expressões RegularesDefinições
”Uma string especialmente codificada que, quando usada (...) podecorresponder a outras strings.” - Fitzgerald, Michael
”Uma expressão regular é um método formal de se especificar umpadrão de texto.” - Jargas, Aurélio Marinho
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 9 / 57
Expressões RegularesExemplos reais
Email:[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}
Número IP:\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Cartão de crédito:^4[0-9]{12}(?:[0-9]{3})?$
Trim:^[\s]*(.*?)[\s]*$
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 10 / 57
Expressões RegularesExemplos reais
Email:[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}
Número IP:\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Cartão de crédito:^4[0-9]{12}(?:[0-9]{3})?$
Trim:^[\s]*(.*?)[\s]*$
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 10 / 57
Expressões RegularesExemplos reais
Email:[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}
Número IP:\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Cartão de crédito:^4[0-9]{12}(?:[0-9]{3})?$
Trim:^[\s]*(.*?)[\s]*$
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 10 / 57
Expressões RegularesExemplos reais
Email:[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}
Número IP:\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Cartão de crédito:^4[0-9]{12}(?:[0-9]{3})?$
Trim:^[\s]*(.*?)[\s]*$
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 10 / 57
Representação de caracteres
Representação de caracteres
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 11 / 57
Caracteres no regex
Cada caractere em uma expressão regular pode ser de dois tipos:
MetacaractereTem um significado específico dentro da regex ;
LiteralSignifica ele próprio;
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 12 / 57
Caractere literal
A expressão:ab
Casa com:
f ab
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 13 / 57
Caractere literal
A expressão:ab
Casa com:
b ab a
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 13 / 57
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
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
Lista de caracteres
”Mais restrito do que o Ponto (.), a lista é um conjunto de caracteresrestrito.”
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
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
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
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
ExemploValidaçã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
ExemploValidaçã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
ExemploValidaçã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
Quantificadores
Quantificadores
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 22 / 57
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Tem que ter: 1 ou maisRegex 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
Controle
Especifica exatamente quantas repetições consecutivas se espera de umconjunto.
{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
Controle
A expressão:
ab{2}c
Casa com:
abbc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 31 / 57
Controle
A expressão:
ab{1,3}c
Casa com:
abc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 32 / 57
Controle
A expressão:
ab{1,3}c
Casa com:
abbc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 32 / 57
Controle
A expressão:
ab{1,3}c
Casa com:
abbbc
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 32 / 57
Controle
A expressão:
a[a-z]{1,3}i
Casa com:br asi l
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 33 / 57
Controle
A expressão:
a[a-z]{1,3}i
Casa com:
abri l
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 33 / 57
Controle
A expressão:
a[a-z]{1,3}i
Casa com:ativi dade
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 33 / 57
ExemploValidaçã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
ExemploValidaçã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
ExemploValidaçã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
Grupos
”Junta elementos de uma expressão regular”
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 38 / 57
Grupos
A expressão:
a[0-9]+
Casa com:a1
A expressão:
(a[0-9])+
Casa com:a1
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 39 / 57
Grupos
A expressão:
a[0-9]+
Casa com:a12
A expressão:
(a[0-9])+
Casa com:a1a2
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 39 / 57
Grupos
A expressão:
a[0-9]+
Casa com:a123
A expressão:
(a[0-9])+
Casa com:a1a2a3
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 39 / 57
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
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
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
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
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
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
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
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
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
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
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
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
ExemploCasamento 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
Remover dígitos
Sem regex:"111.222.333-44"
.replace(/0/g, "@")
.replace(/1/g, "@")
.replace(/2/g, "@")
.replace(/3/g, "@")
.replace(/4/g, "@")
.replace(/5/g, "@")
.replace(/6/g, "@")
.replace(/7/g, "@")
.replace(/8/g, "@")
.replace(/9/g, "@");
Com regex:"111.222.333-44"
.replace(/[0-9]/g, "@");
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 48 / 57
Remover dígitos
Sem regex:"111.222.333-44"
.replace(/0/g, "@")
.replace(/1/g, "@")
.replace(/2/g, "@")
.replace(/3/g, "@")
.replace(/4/g, "@")
.replace(/5/g, "@")
.replace(/6/g, "@")
.replace(/7/g, "@")
.replace(/8/g, "@")
.replace(/9/g, "@");
Com regex:"111.222.333-44"
.replace(/[0-9]/g, "@");
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 48 / 57
Formatar número CPF
"00000000000".replace(/([0-9]{3})([0-9]{3})([0-9]{3})([0-9]{2})/g,"$1.$2.$3-$4"
);
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 49 / 57
Gerar SQL de um CSV
var csv = "São Paulo;SP\n";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
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
Livros
Expressões Regulares: Uma Abordagem Divertida - Jargas, Aurélio Marinho
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 53 / 57
Livros
Introdução às Expressões Regulares - Fitzgerald, Michael
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 54 / 57
Referências I
Expressões Regulares - Guia de Consulta Rápidahttp://aurelio.net/regex/guia/
Regular-Expressions.infohttp://www.regular-expressions.info/
Expressões Regulares / Regular Expressions Toolhttp://www.regexp.com.br/
Regular Expression 101 Toolhttps://regex101.com/
Regex Crosswordhttps://regexcrossword.com/
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 55 / 57
Contato
github.com/chiquitto linkedin.com/in/chiquitto
Alisson G. Chiquitto (devparana.org) Regex 14 de setembro de 2016 56 / 57