Você está na página 1de 55

Luiz Fernando Batista Loja

(e)xpr\1s{2}\1s r\1gular\1s

Cronograma
Introduo Terminologia Primeiro Exemplo Metacaracteres
Representantes Quantificadores Ancoras Outros Modernos

Introduo
1943 estudo que teorizava o funcionamento dos nossos neurnios Stephen Cole Kleene descrio da teoria dos autmatos lgebra de conjunto regulares Regexp Identificar cadeias de caracteres atravs de um mtodo formal de identificao de texto Escritas em linguagem formal So interpretadas Assunto pouco estudado

Introduo
Mo na roda para tratamento de strings
Procurar e substituir textos Validar determinadas strings Filtragem de informao

http://aurelio.net/regex/guia/ Aurlio Marinho Jargas


uma composio de smbolos, caracteres com funes especiais, que, agrupados entre si e com caracteres literais, formam uma seqncia, uma expresso

Introduo
Uma maneira de procurar um texto que voc no lembra exatamente como , mas tem idia das variaes possveis; Uma maneira de procurar um trecho em posies especficas como no comeo ou no fim de uma linha, ou palavra; Uma maneira de um programador especificar padres complexos que podem ser procurados e casados em uma cadeia de caracteres; Uma construo que utiliza pequenas ferramentas, feita para obter determinada seqncia de caracteres de um texto.

Terminologia
ER
Regexp Regex Expreg

Formada por smbolos e caracteres


Caracteres A b c 1 2 3 Metacaracteres + () ? * . Interpretador

Terminologia
Casar
Bater Conferir Encaixar Igualar

Padro
Palavras Linha vazia Numero

Robozinho
Compilador Interpretador

Terminologia
Dizer algo abrangente de forma especfica Exemplo
[rgp]ato
Casa com rato, gato e pato

Buscar padres
Email Data Telefone Cpf

Primeiro Exemplo
Como fazer para buscar os usurios que acessaram o sistema apenas no perodo da tarde

^1[2-8]

Metacaracteres

Representantes
Representar um ou mais caracteres Associao entre elementos como links, apelidos Casam com a posio de um nico caractere

Ponto . (necessitado)
Coringa solitrio Procura um casamento no importa com quem seja Exemplo /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

Resumo
O ponto casa com qualquer coisa. O ponto casa com o ponto. O ponto um curinga para casar um caractere.

Lista [] (a exigente)
Sabe com quem quer casar. Ela s casa com quem ela conhece n[a]o Dentro da lista todo mundo normal Faa uma lista que s aceite nmeros Faa uma lista da hora

Lista [] (a exigente)
Intervalo representado por - [0123456789] igual a [0-9] Alguns intervalos (Tabela ASCII)
a-z A-Z 5-9 a-f :-@ = : ; < = > ? @

Representar o trao no final da lista [a-z-]

Lista [] (a exigente)
Caracteres acentuados POSIX Leva em conta a localidade do sistema (Exemplo)

Lista [] (a exigente)
Resumo
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.

Lista negada [^ ] (a experiente)


Sabe o que no serve para casar Casa com qualquer coisa fora dos componentes listados Se quiser casar com ^ ... Exemplos
[^A-Z^] [^[:digit:]]

Resumo
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.

Quantificadores
Serve para determinar o nmero de repeties do caractere anterior Quantas vezes o tomo anterior pode aparecer Quantificadores
No so quantificveis So gulosos

Opcional: o irrelevante ?
Pode haver ou no a ocorrncia da entidade Repete 0 ou 1 vez /7?/ a ocorrncia de 7 ou no Cada caractere forma um tomo Resumo
O opcional opcional. O opcional til para procurar palavras no singular e plural. Podemos tornar opcionais caracteres e metacaracteres.

Como ler uma expresso regular


Como ?
Leia tomo por tomo da esquerda para direita Entenda o todo Analise as possibilidades

Exemplo
/fala[r!]?/
um f seguido de um a, seguido de um l, seguido de um a, seguido de: ou r, ou !, ambos opcionais

Fazer a leitura geralmente em voz alta


Depois mentalmente

Resumo
Leia a ER tomo por tomo, da esquerda para a direita. Leia a ER, entenda o todo e analise as possibilidades.

Asterisco: o tanto-faz *
Pode haver ou no a entidade vrias vezes Entidade anterior pode aparecer em vrias quantidades, ou no. /Bi*p/ /b[ip]*/ Ganancioso
/a[ra]/ 1) a [ar] zero vezes, seguido de a 2) ara [ar] duas vezes (a,r), seguido de a 3) arara [ar] quatro vezes (a,r,a,r), seguido de a 4) n.d.a.

Asterisco: o tanto-faz *
Metacaracteres extremamente abrangentes . e *. Se combinarmos os dois poderemos falar qualquer coisa Resumo
O asterisco repete em qualquer quantidade. Quantificadores so gulosos. O coringa .* o tudo e o nada, qualquer coisa.

Mais: o tem-que-ter +
Funcionamento idntico ao asterisco Diferena
Pelo menos um

No mnimo uma repetio Exemplos de bips Resumo


O mais repete em qualquer quantidade, pelo menos uma vez. O mais igual ao asterisco, s mais exigente.

Chaves: o controle {n,m}


Quantificao mais controlado Especificar quantas repeties se quer da entidade anterior De n at m repeties 3{1,7}

Chaves: o controle {n,m}


Resumo
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.

ncoras
Marcam uma posio especfica da linha Quantificadores no tem influncia sobre eles

Circunflexo: o incio ^
Marca o comeo da linha ^[0-9] a partir do comeo da linha case um nmero

Resumo
Circunflexo um nome chato, porm chapeuzinho legal. Serve para procurar palavras no comeo da linha. S especial no comeo da ER.

Cifro: o fim $
Marca o fim da linha e s valido no final /^$/ linha vazia O que esta expresso faz /^.{20,60}$/ Resumo
Serve para procurar palavras no fim da linha. S especial no final da ER. cifro e no dlar.

Borda: a limtrofe \b
A borda de uma palavra Marca os limites de uma palavra onde ela comea e onde termina Termina tudo que difere [A-Za-z0-9_] Exemplo
\bdia dia\b \bdia\b

Resumo
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
Funo especfica e no relacionadas entre si

Escape: a criptonita \
Caso precise de um caractere que meta mas voc deseja seu valor literal \., \[ , \], \?, \+ , \{, \}, \^ e \$ \\ escapa a si prprio Expresso regular para casar com rg no formato
n.nnn.nnn-n
[0-9]\.[0-9]{3}\.[0-9]{3}-[0-9]

Resumo
O escape escapa um metacaractere, tirando seu poder. \* = [*] = asterisco literal. O escape escapa o escape, escapando-se a si prprio simultaneamente.

Ou: o alternativo |
Ou isso ou aquilo
/boa-tarde|boa-noite/ http://|ftp://

Resumo
O ou indica alternativas. Lista para um caractere, ou para vrios. O grupo multiplica o poder do ou.

Grupo: o pop (...)


Juntar vrias expresses em apenas um local
Caracteres Metacaracteres Outros grupos

Pode ser quantificado

Grupo: o pop (...)


Resumo
Grupos servem para agrupar. Grupos so muito poderosos. Grupos podem conter grupos. Grupos so quantificveis.

Retrovisor: o saudosista \1 ... \9


Repete a expresso casada O retrovisor referencia o texto casado e no a ER do grupo.

Resumo
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 metacaracteres


Diferenas entre linguagens Opcional ?, \? ou \= Em aplicativos mais antigos os metacaracteres devem ser escapados \( \| \? e etc. Tabela de diferenas

Quantificadores gulosos
Casam o mximo possvel Exemplo
Um <b> negrito</b> aqui.

Desejamos casa <b> e </b> para apag-los Usaremos a expresso <.*>


Ela vai casar com <b> negrito </b>

Asterisco casou com o mximo que conseguiu Exemplo no quadro

Quantificadores no gulosos
O menor casamento Presente apenas nas linguagens mais recentes Acrescentar ? logo aps o quantificador Quantificador tmido

Metacaracteres tipo barra-letra


Representados por uma barra invertida \ e em seguida uma letra qualquer como \w ou \s

Metacaracteres tipo barra-letra


POSIX mais elegante Validos fora da lista

Metacaracteres tipo barra-letra

Metacaracteres tipo barra-letra

Metacaracteres modernos
Case esta ER somente se seguida de tal coisa. Case esta ER somente se no precedida de tal coisa. O "tal coisa" pode ser uma ER mais complicada que a original. Grupos nomeveis que geram pseudovariveis (veja Python). Grupos que no so acessveis por retrovisores. Case isso somente se o grupo anterior tambm casou. Estrutura de "if-then-else" dentro de ERs. A "configurao" de apenas partes da ER. Execuo de trechos de linguagem de programao no meio de ERs.

Metacaracteres modernosos
Estrutura
(?<identificador><contedo>) Identificador o tipo de metacaractere Contedo o que ser manipulado por este caractere
Metacaractere texto normal cdigos de linguagem externa

Comentrio (?#texto)
Ignorado pelo rob de busca (?# O nome) luiz (?# Sobre nome) loja

Grupos (?:ER)
Grupos () Inacessveis por retrovisores Grupo fantasma ^(Homer) (?:J\.) (Simpson) \1 = Homer e \2 = Simpson

Verificador (?=ER)
Verifica a prxima expresso se casar retorna verdadeira Homer (?=Simpson)
S casar homer se for seguido de simpson Entretanto o sobrenome no far parte do trecho casado :D. S serviu para checagem

Verificador (?!ER)
Contrrio da anterior verifica a prxima expresso se no casar retorna verdadeira Homer (?!Simpson)
S casar homer se no for seguido de simpson

Verificador (?<=ER)
Verifica a expresso anterior casa ento retorna verdadeira (?<=Simpson) Homer
S casar homer se for precedido de simpson

Verificador (?<!ER)
Contrrio da anterior verifica expresso anterior no casa ento retorna verdadeira (?<!Simpson) Homer
S casar homer se no for precedido de simpson

(?modificador)
Configurar uma parte da ER i: ignorar a diferena entre maisculas e minsculas; m: trata o texto como multilinha; s: trata o texto como uma nica linha; x: permite incluso de espaos e comentrios; L: levar em conta a localizao do sistema (somente Python).

(?(condio)ER-sim|ER-no)
If-then-else A condio um nmero que referncia um grupo Usado geralmente para verificao de elementos que abrem e devem ser fechados Verificao de parnteses
(\()?[0-9]+(?(1)\))

(?{cdigo})
S funciona para Perl

Precedncia entre metacaracteres


S funciona para Perl

Regras para facilitar a manuteno


Simplifique sempre
Exemplo rg Nem sempre a ER menor melhor KISS (Keep it Simple, Stupid)

Use o circunflexo
Poupa tempo

Evite lista negada


Nega pouca coisa e permite o resto No tenha preguia de descobrir todas as possibilidades de uma posio.

Evite o coringa .*

Você também pode gostar