Anda di halaman 1dari 60

Expresses Regulares

(De leigo para leigos)


Stanley Alves
email: stanleymsn@gmail.com
skype: stanleymsn
O que raios so as expresses
regulares ?
Definio
uma composio de smbolos, caracteres com
funes especiais, que, agrupados entre si e
com caracteres literais, formam uma
seqncia, uma expresso. Essa expresso
interpretada como uma regra, que indicar
sucesso se uma entrada de dados qualquer
casar com essa regra, ou seja, obedecer
exatamente a todas as suas condies.
No entendi po*** nenhuma !!! >-(
Definio
Resumidamente falando uma expresso
regular um mtodo formal de se
especificar um padro de texto.
Melhorou, mas ainda t confunso.
Definio
Como o brinquedo LEGO
Como um quebra-cabea
Como um jogo
Como o alfabeto
Acima de tudo, assim como um sorvete no
domingo ensolarado, uma expresso regular
: Divertida!
Entendi, mas o que voc quiz dizer
com divertida? T louco? Todos
aqueles smbolos estranhos...
"Vamos destruir aquilo que no entendemos!"
Vem c, mais de onde surgiram
essas tais expresses regulares, tem
algo a ver com expresses
matemticas?
Histria
1943 => tese de dois neurologistas,
publicaram um estudo sobre o
funcionamento dos neuronios;
1968 => primeiro contato das ERs com a
computacao, atraves do editor qed;
1986 => criao do pacote regex em C (de
graca);
Apesar de esse assunto ser antigo, o que
vamos ver aqui basicamente o mesmo que
um estudante veria h 15 anos atrs.
um conceito consistente, que no sofre
alteraes com o passar do tempo.
Curiosidade
Terminologia
E se eu te disser que "ERs so
metacaracteres que casam um padro"? No
entendeu?
Metacaracteres so smbolos que possuem
funes especiais.
O termo casar ("match") s vezes pode
assustar um leitor meio distrado. como
em um caixa 24 horas...
Terminologia
Tambm temos o padro ("pattern"), que
nosso objetivo quando fazemos uma ER:
casar um padro. Esse padro pode ser uma
palavra, vrias, uma linha vazia, um
nmero, ou seja, o que quer que precise ser
encontrado pela nossa ER.
Para que servem?
Exemplo
Sistema de login
05:15 ernesto
08:39 ricardo
10:32 patricia
14:59 gabriel
16:27 carla
22:23 marcelo
Exemplo
Como fazer para buscar automaticamente
apenas os usurios que acessaram o sistema
no perodo da tarde (meio-dia s seis)?
Exemplo
Voc tem vrias opes:
- desde procurar uma a uma manualmente;
- fazer um programa que compare os
primeiros caracteres de cada linha;
- mas falando de algo prtico e rpido, que
no exija conhecimentos de programao, a
ER simplesmente ^1[2-8].+
O que significa essa sopa de
letrinhas?
Os Metacaracteres
Ento, para j matar sua curiosidade, aqui
esto os to falados metacaracteres-padro
que sero nossos personagens dos prximos
slides: . ? * + ^ $ | [ ] { } ( ) \. E a, sentiu
um frio na barriga?
Os Metacaracteres
Cada simbolozinho desses tem sua funo
especfica, que pode mudar dependendo do
contexto no qual est inserido, e podemos
agreg-los uns com os outros, combinando
suas funes e fazendo construes mais
complexas.
Vamos dar nomes aos bois
meta mnemnico
------------------------------
. ponto
[] lista
[^] lista negada
? opcional
* asterisco
+ mais
{} chaves
meta mnemnico
------------------------------
^ circunflexo
$ cifro
\b borda
\ escape
| ou
() grupo
\1 retrovisor
Separando por funo
=> Representantes
meta mnemnico funo
---------------------------------------------------------------
. ponto um caractere qualquer
[...] lista lista de caracteres permitidos
[^...] lista negada lista de caracteres proibidos
=> Quantificadores
meta mnemnico funo
---------------------------------------------------------------
? opcional zero ou um
* asterisco zero, um ou mais
+ mais um ou mais
{n,m} chaves de n at m
=> ncoras
meta mnemnico funo
---------------------------------------------------------------
^ circunflexo incio da linha
$ cifro fim da linha
\b borda incio ou fim de palavra
=> Outros
meta mnemnico funo
---------------------------------------------------------------
\c escape torna literal o caractere c
| ou ou um ou outro
(...) grupo delimita um grupo
\1...\9retrovisor texto casado nos grupos 1...9
Aaaah, ? O '*' eu j uso na linha de
comando!
Metacaracteres tipo Representante
Ponto: o necessitado .
O ponto casa com qualquer coisa.
O ponto casa com o ponto.
O ponto um curinga para casar um
caractere.
Ponto: o necessitado .
ER: fala.
"Olha, com vocs me pressionando a fala no
vai sair natural. Eu no consigo me concentrar
na minha fala. Alis, isso um falatrio, pois
nunca vi um comercial com tantas falas assim.
Vou me queixar com o problemasnafala@
medicos.com.br"
Lista: a exigente [...]
A lista casa com quem ela conhece e tem suas prprias
regras.
Dentro da lista, todo mundo normal.
Dentro da lista, trao indica intervalo.
Um - literal deve ser o ltimo item da lista.
Um ] literal deve ser o primeiro item da lista.
Os intervalos respeitam a tabela ASCII (no use A-z).
[:classes POSIX:] incluem acentuao, A-Z no.
Classes POSIX
classe POSIX similar significa
---------------------------------------------
[:upper:] [A-Z] letras maisculas
[:lower:] [a-z] letras minsculas
[:alpha:] [A-Za-z] maisculas/minsculas
[:alnum:] [A-Za-z0-9] letras e nmeros
[:digit:] [0-9] nmeros
[:xdigit:] [0-9A-Fa-f] nmeros hexadecimais
classe POSIX similar significa
---------------------------------------------
[:punct:] [.,!?:...] sinais de pontuao
[:blank:] [ \t] espao e TAB
[:space:] [ \t\n\r\f\v]caracteres brancos
[:cntrl:] - caracteres de controle
[:graph:] [^ \t\n\r\f\v] caracteres
imprimveis
[:print:] [^\t\n\r\f\v] imprimveis e o
espao
Lista negada: a experiente [^...]
Uma lista negada segue todas as regras de
uma lista normal.
Um ^ literal no deve ser o primeiro item
da lista.
[:classes POSIX:] podem ser negadas.
A lista negada sempre deve casar algo.
Metacaracteres tipo Quantificador
Opcional: o opcional ?
O opcional opcional.
O opcional til para procurar palavras no
singular e plural.
Podemos tornar opcionais caracteres e
metacaracteres.
Asterisco: o tanto-faz *
O asterisco repete em qualquer quantidade.
Quantificadores so gulosos.
O curinga .* o tudo e o nada, qualquer
coisa.
Mais: o tem-que-ter +
O mais repete em qualquer quantidade,
pelo menos uma vez.
O mais igual ao asterisco, s que mais
exigente.
Chaves: o controle {n,m}
Chaves so precisas.
Voc pode especificar um nmero exato,
um mnimo, um mximo, ou uma faixa
numrica.
As chaves simulam o *, o + e a ?.
As chaves no so o Chaves.
Metacaracteres tipo ncora
Circunflexo: o incio ^
Circunflexo um nome chato, porm
chapeuzinho legal.
Serve para procurar palavras no comeo da
linha.
S especial no comeo da ER.
Cifro: o fim $
Serve para procurar palavras no fim da
linha.
S especial no final da ER.
cifro e no dlar.
Pausa para pensar (Uffa)
^$
Um comeo de linha seguido de...
mmmmmm... um fim de linha?
Sim, e o que isso significa?
Ah! Uma linha vazia!
Borda: a limtrofe \b
A borda marca os limites de uma palavra
O conceito "palavra" engloba letras,
nmeros e o sublinhado
A borda til para casar palavras exatas e
no parciais
Outros Metacaracteres
Escape: a criptonita \
O escape escapa um metacaractere, tirando
seu poder.
\* = [*] = asterisco literal.
O escape escapa o escape, escapando-se a
si prprio simultaneamente.
Ou: o alternativo |
O ou indica alternativas.
Lista para um caractere, ou para vrios.
O grupo multiplica o poder do ou.
Grupo: o pop (...)
Grupos servem para agrupar.
Grupos so muito poderosos.
Grupos podem conter grupos.
Grupos so quantificveis.
Retrovisor: o saudosista \1 ... \9
O retrovisor s funciona se usado com o
grupo.
O retrovisor serve para procurar palavras
repetidas.
Numeram-se retrovisores contando os
grupos da esquerda para a direita.
Temos no mximo 9 retrovisores por ER.
Mais sobre os metacaracteres
Quantificadores: gulosos x no gulosos
gulosos
---------------------
a.* aaaaa
a.+ aaaaa
a.? aa
a.{1,3} aaaa
no-gulosos
---------------------
a.*? a
a.+? aa
a.?? a
a.{1,3}? aa
Metacaracteres tipo barra-letra
b-l nome traduo
---------------------------------------------
\a alert alerta (bipe)
\b backspace caract. Backspace
\e escape caractere Esc
\f form feed alimentao
\n newline linha nova
\r carriage ret retorno de carro
\t htab tabulao horizontal
\v vtab tabulao vertical
b-l POSIX equiv. mnemnico
-------------------------------------------
\d [[:digit:]] dgito
\D [^[:digit:]] no-dgito
\w [[:alnum:]_] palavra
\W [^[:alnum:]_]no-palavra
\s [[:space:]] branco
\S [^[:space:]] no-branco
Metacaracteres modernosos
(?#texto)
Inserir comentrios dentro da expresso
regular
(?:ER)
Serve para desconsiderar um grupo na
contagem de grupos capturados
(?=ER)
No casa caracteres na posio atual, mas d
uma "espiada" adiante e caso a ER embutida
case, retorna sucesso. como s apostar na
loteria se voc j souber o resultado. Por
exemplo a ER Homer (?=Simpson) s casar o
Homer se for seguido de Simpson. Mas o
sobrenome no faz parte do trecho casado,
serviu apenas para checagem.
(?!ER)
o contrrio do anterior, s casando um
trecho se este no for seguido da ER
embutida. Ento Homer (?!morreu) casa o
Homer do texto Homer comeu, mas no do
Homer morreu.
(?<=ER) e (?<!ER)
Estes dois so complementares aos dois
anteriores, a diferena que em vez de
espiar para frente, eles espiam para trs
(note o < apontando para a esquerda).
Ento (?<!Barney) Simpson casar Simpson
em Homer Simpson, mas no em Barney
Simpson.
Exemplo Real
Emitir um relatrio de todos os registros da
tabelaX em ordem alfabtica.
select
nome
from
tabelaX
order by
nome ASC
Exemplo Real
1.1.1 Valor A
4.4 3 Valor D
222 Valor E
1-2-4 Valor B
Exemplo Real
select
substring(nome from '(?![\d\s\-\.]).+')
from tabelaX
order by
substring(nome from '(?![\d\s\-\.]).+') asc;
FIM !!!
Agora voc esta pronto para produzir e usar
suas prprias expresses regulares para os
mais diversos casos e problemas.
RegEx: (Dvidas|Crticas|Sugestes)
Referncias
http://aurelio.net/regex/guia/
http://rubular.com/
http://www.regexr.com/
http://www.nerdson.com

Anda mungkin juga menyukai