20150917 expressoes regulares

31
Expressões regulares Gabriell Nascimento

Upload: gabriell-nascimento

Post on 16-Apr-2017

321 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 20150917 expressoes regulares

Expressões regulares

Gabriell Nascimento

Page 2: 20150917 expressoes regulares

ERs●Método para especificar padrões de texto●a.k.a.: ER, RE, Regex, Regexp

Page 3: 20150917 expressoes regulares

ERs●Surgiram na matemática●Adicionadas ao ed●Biblioteca regex em C

Page 4: 20150917 expressoes regulares

Pra que servem?●Busca●Substituição●Validação●Filtragem●Ganhar almoço●…

Page 5: 20150917 expressoes regulares

Como funcionam?●Interpretador de expressões●Texto é comparado à expressão

Page 6: 20150917 expressoes regulares

Conjunto de metacaracteres e caracteres literais que especifica um padrão de texto

Numa casca de noz

Page 7: 20150917 expressoes regulares

Metacaracteres

. [] ? * + {} ^ $ | () \

Page 8: 20150917 expressoes regulares

Metacaracteres●Representantes: . [] [^]●Quantificadores: ? * + {}●Âncoras: ^ $ \b●Outros: | () \ \1..\9

Page 9: 20150917 expressoes regulares

RepresentantesPonto .

oQualquer caractere Lista [...]

oCaracteres permitidosLista negada [^...]

oCaracteres proibidos

Page 10: 20150917 expressoes regulares

Exemplo.ato

oGato, gato, .ato, 1ato, … [gpr]ato

ogato, pato, rato[^gpr]ato

o .ato, 1ato, Gato, Pato, Rato, …

Page 11: 20150917 expressoes regulares

QuantificadoresOpcional ?

o Zero ou umAsterisco *

o Zero, um ou maisMais +

o Um ou maisChaves {n,m}

o De n a m

Page 12: 20150917 expressoes regulares

ExemploEi!?

o Ei, Ei!Ei!*

o Ei, Ei!, Ei!!!!!, … Ei!+

o Ei!, Ei!!!!!, … Ei!{2,5}

o Ei!!, Ei!!!, Ei!!!!, Ei!!!!!

Page 13: 20150917 expressoes regulares

ÂncorasCircunflexo ^

o Início da linhaCifrão $

oFim da linhaBorda \b

o Início ou fim da palavra

Page 14: 20150917 expressoes regulares

Exemplo^[a-z].+

oaa, b1, c^!1, … .+[a-z]$

o123a, 1b, aa, .z, $12d, … dia\b

odia, melodia, bom-dia, …

Page 15: 20150917 expressoes regulares

OutrosEscape \

o Torna literal um caractere Ou |

o Ou um ou outroGrupo (...)

o Delimita um grupoRetrovisor \1..\9

o Guarda texto casado nos grupos 1..9

Page 16: 20150917 expressoes regulares

Exemplohoje\??

o hoje, hoje?noite|tarde

o Boa noite, boa tarde, … (nyan)+

o nyan, nyannyan, nyannyannyannyannyannyan(bom)\1

o bombom

Page 17: 20150917 expressoes regulares
Page 18: 20150917 expressoes regulares

Mas primeiro!

Page 19: 20150917 expressoes regulares

Mas primeiro!Algumas dicas.

Page 20: 20150917 expressoes regulares

Dica #1Saiba o que você quer

Page 21: 20150917 expressoes regulares

Dica #2Seja específic[ao]

Page 22: 20150917 expressoes regulares

Dica #3KISS

(Keep It Simple, Stupid!)

Page 23: 20150917 expressoes regulares

Dica #4Saiba quando usar

Page 24: 20150917 expressoes regulares

$ cat /tmp/log.txt1.2.3.4 - - [17/Sep/2015:18:00:00 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.4 - - [17/Sep/2015:18:00:02 -0300] "GET /nao/tem HTTP/1.1" 404 421.2.3.3 - - [17/Sep/2015:18:00:05 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /nao/tem HTTP/1.1" 404 42

Page 25: 20150917 expressoes regulares

$ cat /tmp/log.txt1.2.3.4 - - [17/Sep/2015:18:00:00 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.4 - - [17/Sep/2015:18:00:02 -0300] "GET /nao/tem HTTP/1.1" 404 421.2.3.3 - - [17/Sep/2015:18:00:05 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /nao/tem HTTP/1.1" 404 42

$ egrep -o "\[(/?.*){2}(:.*){3}\]" /tmp/log.txt[17/Sep/2015:18:00:00 -0300][17/Sep/2015:18:00:02 -0300][17/Sep/2015:18:00:05 -0300][17/Sep/2015:18:00:10 -0300][17/Sep/2015:18:00:10 -0300]

Page 26: 20150917 expressoes regulares

$ cat /tmp/log.txt1.2.3.4 - - [17/Sep/2015:18:00:00 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.4 - - [17/Sep/2015:18:00:02 -0300] "GET /nao/tem HTTP/1.1" 404 421.2.3.3 - - [17/Sep/2015:18:00:05 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /nao/tem HTTP/1.1" 404 42

# Aplicando dicas 1 e 2$ egrep -o "[0-9]{2}/[A-Z][a-z]{2}/[0-9]{4}(:[0-9]{2}){3}" /tmp/log.txt17/Sep/2015:18:00:0017/Sep/2015:18:00:0217/Sep/2015:18:00:0517/Sep/2015:18:00:1017/Sep/2015:18:00:10

Page 27: 20150917 expressoes regulares

$ cat /tmp/log.txt1.2.3.4 - - [17/Sep/2015:18:00:00 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.4 - - [17/Sep/2015:18:00:02 -0300] "GET /nao/tem HTTP/1.1" 404 421.2.3.3 - - [17/Sep/2015:18:00:05 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /nao/tem HTTP/1.1" 404 42

# Aplicando dica 3$ egrep -o "[0-9]{2}/[A-Z][a-z]{2}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2}" \ /tmp/log.txt17/Sep/2015:18:00:0017/Sep/2015:18:00:0217/Sep/2015:18:00:0517/Sep/2015:18:00:1017/Sep/2015:18:00:10

Page 28: 20150917 expressoes regulares

$ cat /tmp/log.txt1.2.3.4 - - [17/Sep/2015:18:00:00 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.4 - - [17/Sep/2015:18:00:02 -0300] "GET /nao/tem HTTP/1.1" 404 421.2.3.3 - - [17/Sep/2015:18:00:05 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /exemplo HTTP/1.1" 200 5121.2.3.3 - - [17/Sep/2015:18:00:10 -0300] "GET /nao/tem HTTP/1.1" 404 42

# Aplicando dicas 3 e 4$ cut -d' ' -f4 /tmp/log.txt | tr -d '['17/Sep/2015:18:00:0017/Sep/2015:18:00:0217/Sep/2015:18:00:0517/Sep/2015:18:00:1017/Sep/2015:18:00:10

Page 29: 20150917 expressoes regulares

Para saber mais

Page 30: 20150917 expressoes regulares

4 fun!http://regexcrossword.com/http://xkcd.com/208/http://xkcd.com/1171/

Page 31: 20150917 expressoes regulares

Obrigado!