You are on page 1of 55

Luiz Fernando Batista Loja

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

Cronograma
• • • • Introdução Terminologia Primeiro Exemplo Metacaracteres
– Representantes – Quantificadores – Ancoras – Outros – Modernos

Introdução
• 1943 estudo que teorizava o funcionamento dos nossos neurônios • Stephen Cole Kleene descrição da teoria dos autômatos • Álgebra de conjunto regulares • Regexp • Identificar cadeias de caracteres através de um método formal de identificação de texto • Escritas em linguagem formal • São interpretadas • Assunto pouco estudado

Introdução
• Mão na roda para tratamento de strings
– Procurar e substituir textos – Validar determinadas strings – Filtragem de informação

• http://aurelio.net/regex/guia/ • Aurélio Marinho Jargas
– É uma composição de símbolos, caracteres com funções especiais, que, agrupados entre si e com caracteres literais, formam uma seqüência, uma expressão

Introdução
• Uma maneira de procurar um texto que você não lembra exatamente como é, mas tem idéia das variações possíveis; • Uma maneira de procurar um trecho em posições específicas como no começo ou no fim de uma linha, ou palavra; • Uma maneira de um programador especificar padrões complexos que podem ser procurados e casados em uma cadeia de caracteres; • Uma construção que utiliza pequenas ferramentas, feita para obter determinada seqüência de caracteres de um texto.

– Interpretador .Terminologia • ER – Regexp – Regex – Expreg • Formada por símbolos e caracteres – Caracteres A b c 1 2 3 – Metacaracteres + () ? * .

Terminologia • Casar – – – – Bater Conferir Encaixar Igualar • Padrão – Palavras – Linha vazia – Numero • Robozinho – Compilador – Interpretador .

Terminologia • Dizer algo abrangente de forma específica • Exemplo – [rgp]ato • Casa com rato. gato e pato • Buscar padrões – Email – Data – Telefone – Cpf .

Primeiro Exemplo – Como fazer para buscar os usuários que acessaram o sistema apenas no período da tarde – ^1[2-8] .

Metacaracteres .

Representantes – Representar um ou mais caracteres – Associação entre elementos como links. apelidos – Casam com a posição de um único caractere .

/ • "Olha. (necessitado) • Coringa solitário • Procura um casamento não importa com quem seja • Exemplo /fala.Ponto .br“ • Resumão – O ponto casa com qualquer coisa. . Vou me queixar com o problemasnafala@ medicos. – O ponto é um curinga para casar um caractere. – O ponto casa com o ponto.com. Eu não consigo me concentrar na minha fala. isso é um falatório. Aliás. pois nunca vi um comercial com tantas falas assim. com vocês me pressionando a fala não vai sair natural.

Lista [] (a exigente) • Sabe com quem quer casar. Ela só casa com quem ela conhece • n[ãa]o • Dentro da lista todo mundo é normal • Faça uma lista que só aceite números • Faça 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 traço no final da lista [a-z-] .

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

traço indica intervalo. – Dentro da lista.Lista [] (a exigente) • Resumão – A lista casa com quem ela conhece e tem suas próprias regras. – Os intervalos respeitam a tabela ASCII (não use A-z). . – Um ] literal deve ser o primeiro item da lista.literal deve ser o último item da lista. – Um . todo mundo é normal. – [:classes POSIX:] incluem acentuação. – Dentro da lista. A-Z não.

... Um ^ literal não deve ser o primeiro item da lista. Exemplos – [^A-Z^] – [^[:digit:]] • Resumão – – – – Uma lista negada segue todas as regras de uma lista normal. A lista negada sempre deve casar algo.Lista negada [^ ] (a experiente) • • • • Sabe o que não serve para casar Casa com qualquer coisa fora dos componentes listados Se quiser casar com ^ . [:classes POSIX:] podem ser negadas.

Quantificadores – Serve para determinar o número de repetições do caractere anterior – Quantas vezes o átomo anterior pode aparecer – Quantificadores • Não são quantificáveis • São gulosos .

Opcional: o irrelevante ? • • • • • Pode haver ou não a ocorrência da entidade Repete 0 ou 1 vez /7?/ a ocorrência de 7 ou não Cada caractere forma um átomo Resumão – O opcional é opcional. – Podemos tornar opcionais caracteres e metacaracteres. . – O opcional é útil para procurar palavras no singular e plural.

ambos opcionais • Fazer a leitura geralmente em voz alta – Depois mentalmente • Resumão – Leia a ER átomo por átomo. entenda o todo e analise as possibilidades. – Leia a ER. da esquerda para a direita.Como ler uma expressão 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 a. ou !. seguido de um l. seguido de: ou r.

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

e *. qualquer coisa. – Quantificadores são gulosos. • Se combinarmos os dois poderemos falar qualquer coisa • Resumão – O asterisco repete em qualquer quantidade.Asterisco: o tanto-faz * • Metacaracteres extremamente abrangentes .* é o tudo e o nada. . – O coringa .

pelo menos uma vez. .Mais: o tem-que-ter + • Funcionamento idêntico ao asterisco • Diferença – Pelo menos um • No mínimo uma repetição • Exemplos de bips • Resumão – O mais repete em qualquer quantidade. só mais exigente. – O mais é igual ao asterisco.

7} .Chaves: o controle {n.m} • Quantificação mais controlado • Especificar quantas repetições se quer da entidade anterior • De n até m repetições • 3{1.

. ou uma faixa numérica. o + e a ?.m} • Resumão – Chaves são precisas. – As chaves simulam o *. – As chaves não são o Chaves. um máximo. um mínimo. – Você pode especificar um número exato.Chaves: o controle {n.

Âncoras • Marcam uma posição específica da linha • Quantificadores não tem influência sobre eles .

– Só é especial no começo da ER.Circunflexo: o início ^ • Marca o começo da linha • ^[0-9] a partir do começo da linha case um número • Resumão – Circunflexo é um nome chato. – Serve para procurar palavras no começo da linha. porém chapeuzinho é legal. .

Cifrão: o fim $ • • • • Marca o fim da linha e só é valido no final /^$/ linha vazia O que esta expressão faz /^. – É cifrão e não dólar. .60}$/ Resumão – Serve para procurar palavras no fim da linha. – Só é especial no final da ER.{20.

números e o sublinhado – A borda é útil para casar palavras exatas e não parciais .Borda: a limítrofe \b • A borda de uma palavra • Marca os limites de uma palavra onde ela começa e onde termina • Termina tudo que difere [A-Za-z0-9_] • Exemplo – \bdia – dia\b – \bdia\b • Resumão – A borda marca os limites de uma palavra – O conceito "palavra" engloba letras.

Outros • Função específica e não relacionadas entre si .

– O escape escapa o escape. .Escape: a criptonita \ • Caso precise de um caractere que é meta mas você deseja seu valor literal • \..nnn. \+ .[0-9]{3}\.nnn-n • [0-9]\. tirando seu poder. \}.[0-9]{3}-[0-9] • Resumão – O escape escapa um metacaractere. \^ e \$ • \\ escapa a si próprio • Expressão regular para casar com rg no formato – n. \[ . \]. \{. \?. – \* = [*] = asterisco literal. escapando-se a si próprio simultaneamente.

Ou: o alternativo | • Ou isso ou aquilo – /boa-tarde|boa-noite/ – http://|ftp:// • Resumão – O ou indica alternativas. ou para vários. . – Lista para um caractere. – O grupo multiplica o poder do ou.

) • Juntar várias expressões em apenas um local – Caracteres – Metacaracteres – Outros grupos • Pode ser quantificado ..Grupo: o pop (..

) • Resumão – Grupos servem para agrupar. – Grupos podem conter grupos.Grupo: o pop (. – Grupos são quantificáveis. – Grupos são muito poderosos. ...

. \9 • Repete a expressão casada • O retrovisor referencia o texto casado e não a ER do grupo.. – Numeram-se retrovisores contando os grupos da esquerda para a direita. . – Temos no máximo 9 retrovisores por ER. • Resumão – O retrovisor só funciona se usado com o grupo. – O retrovisor serve para procurar palavras repetidas.Retrovisor: o saudosista \1 .

\? ou \= • Em aplicativos mais antigos os metacaracteres devem ser escapados \( \| \? e etc.Mais sobre metacaracteres • Diferenças entre linguagens • Opcional ?. • Tabela de diferenças .

Quantificadores gulosos • Casam o máximo possível • Exemplo – Um <b> negrito</b> aqui. • Desejamos casa <b> e </b> para apagá-los • Usaremos a expressão <.*> – Ela vai casar com <b> negrito </b> • Asterisco casou com o máximo que conseguiu • Exemplo no quadro .

Quantificadores não gulosos • • • • O menor casamento Presente apenas nas linguagens mais recentes Acrescentar ? logo após o quantificador Quantificador é tímido .

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 .

• Grupos que não são acessíveis por retrovisores. • Grupos nomeáveis que geram pseudovariáveis (veja Python). • O "tal coisa" pode ser uma ER mais complicada que a original. • Execução de trechos de linguagem de programação no meio de ERs. • Case isso somente se o grupo anterior também casou. • Case esta ER somente se não precedida de tal coisa.Metacaracteres modernos • Case esta ER somente se seguida de tal coisa. • Estrutura de "if-then-else" dentro de ERs. • A "configuração" de apenas partes da ER. .

Metacaracteres modernosos • Estrutura – (?<identificador><conteúdo>) – Identificador é o tipo de metacaractere – Conteúdo é o que será manipulado por este caractere • Metacaractere • texto normal • códigos de linguagem externa .

Comentário (?#texto) • Ignorado pelo robô de busca • (?# O nome) luiz (?# Sobre nome) loja .

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

Só serviu para checagem .Verificador (?=ER) • Verifica a próxima expressão se casar retorna verdadeira • Homer (?=Simpson) – Só casará homer se for seguido de simpson – Entretanto o sobrenome não fará parte do trecho casado :D.

Verificador (?!ER) • Contrário da anterior verifica a próxima expressão se não casar retorna verdadeira • Homer (?!Simpson) – Só casará homer se não for seguido de simpson .

Verificador (?<=ER) • Verifica a expressão anterior casa então retorna verdadeira • (?<=Simpson) Homer – Só casará homer se for precedido de simpson .

Verificador (?<!ER) • Contrário da anterior verifica expressão anterior não casa então retorna verdadeira • (?<!Simpson) Homer – Só casará homer se não for precedido de simpson .

• s: trata o texto como uma única linha.(?modificador) • Configurar uma parte da ER • i: ignorar a diferença entre maiúsculas e minúsculas. . • L: levar em conta a localização do sistema (somente Python). • m: trata o texto como multilinha. • x: permite inclusão de espaços e comentários.

(?(condição)ER-sim|ER-não) • If-then-else • A condição é um número que referência um grupo • Usado geralmente para verificação de elementos que abrem e devem ser fechados • Verificação de parênteses – (\()?[0-9]+(?(1)\)) .

(?{código}) • Só funciona para Perl .

Precedência entre metacaracteres • Só funciona para Perl .

Regras para facilitar a manutenção • 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 – Não tenha preguiça de descobrir todas as possibilidades de uma posição.* . • Evite o coringa .