2. Minicurso?
Mote:
Foco no basicão
Objetivos:
Apresentar assunto de forma prática
Despertar interesse
Dar o pontapé inicial
3. Expressões Regulares?
Maneira elegante de manipular strings
Sintaxe própria e relativamente padronizada
Onipresente
Linguagens de programação
Editores de texto
Ferramentas de desenvolvimento em geral
4. Para que servem
Encontrar texto
Processar texto
Substituir texto
5. Aplicações
Validação de entradas
Aplicação de máscaras em campos
CPF, datas, códigos etc.
Filtragem de resultados em consultas
(...)
6. Expressões regulares por aí
URLs
Endereços de e-mail
Datas
Caminhos de arquivo
Trechos de código fonte
(...)
7. Vc já usou e talvez nem saiba!
SELECT * FROM pessoa WHERE
sobrenome LIKE '%Silva%';
ls *.txt
dir *.sys
15. Como funcionam
Classes de caracteres
Espaço em branco: s
Conjunto de possibilidades: [ ]
Qualquer caractere: .
Exemplos:
as*b ‘ab’, ‘a b’, ‘a b’, ‘a b’, ...
var[XYZ] ‘varX’, ‘varY’, ‘varZ’
1. ‘1a’, ‘12’, ‘1;’, ‘1$’, ‘1~’, ...
.* qualquer coisa que caiba em uma linha!
16. Como funcionam
Classes de negação
Tudo que não for dígito: D
Tudo que não for letra, dígito ou ‘_’: W
Tudo que não for espaço em branco: S
Tudo que não estiver no conjunto: [^ ]
Exemplos:
ddD ‘12b’, ‘99/’, ‘23 ’, ...
[^abc]+ ‘d’, ‘ef’, ‘xyzdef’, ‘123’, ‘[]{}()’, ...
17. Como funcionam
Operador “ou”
|
Exemplos:
abc|xyz ‘abc’, ‘xyz’
a|d ‘a’, ‘1’, ‘2’, ‘3’,...
a|x|2|5: o mesmo que [ax25]
18. Grupos
Agrupam trechos de strings
Úteis para:
Extrair partes interessantes da string
Substituir texto
19. Grupos
Exemplo:
HH:MM
dd:dd valida a string
Mas podemos fazer mais...
20. Grupos
Exemplo:
20:32
Não nos interessa muito a string “20:32”
Interessam-nos mais as substrings “20” e “32”
(dd):(dd)
Agrupamos partes da expressão regular
Podemos recuperar os grupos usando 1, 2 etc.
26. Expressões regulares por aí...
Ruby
'abcd1234'.gsub(/d/, '-')
'a12b'.gsub(/a(dd)b/, 'ab1')
Vejamos no irb...
27. Exercícios
Extrair DDD, prefixo e terminal de um
telefone:
“(16) 3202-3934” “16”, “3202”, “3934”
Extrair somente dígitos de CPF:
“123.456.789-00” “12345678900”
Extrair somente as consoantes da frase:
“eu sou a luz das estrelas” “slzdsstrls”
28. Outros metacaracteres
Início da string: ^
Fim da string: $
Exemplos:
^function
Casa com ‘function’, mas não com ‘f = function() { }’
42$
Casa com ‘var v = 42’, mas não com ‘var v = 42;’
^algumPadraoAqui$
Casa somente quando o padrão ocupa a linha inteira
30. Mais quantificadores...
{exato}
d{7} números com exatamente 7 dígitos
{minimo,maximo}
[a-z]{5,8} 5 a 8 letras minúsculas
{minimo,}
[A-Z]{3,} 3 ou mais letras maiúsculas
31. Mais aplicações...
grep
svn st | grep –E '.*j(ava|s)'
Endereço IP
d{1,3}.d{1,3}.d{1,3}.d{1,3}
32. Mais aplicações...
Horário – versão mais precisa
([01][0-9]|2[0-3]):([0-5][0-9])
Nome de variável – versão mais precisa
[A-Za-z_$][w$]*
33. Mais aplicações...
Endereço IP – versão radical
(25[0-5]|2[0-4][0-9]|[01]?[0-
9][0-9]?).(25[0-5]|2[0-4][0-
9]|[01]?[0-9][0-9]?).(25[0-
5]|2[0-4][0-9]|[01]?[0-9][0-
9]?).(25[0-5]|2[0-4][0-
9]|[01]?[0-9][0-9]?)