Regular Expressions (Regex) Daniel   Carneiro
Regular Expressions Padrão para buscas em textos
Primeira aparição no QED em 1966
Utilizado em vários editores e ferramentas atuais, principalmente em ambiente unix.
Possui extensões ao padrão original. Ex: Perl Compatible Reguar Extenstion (PCRE)
Pattern / Matcher Engine regex é divido em 2 partes Pattern -> compila as expressoes
Matcher -> executa as expressoes
Literais Combinam extamente com o padrão.Ex:
Depende de opções como case-insensitive Regex Padrão def abc def ghi a J a ck is  a  boy
Caracteres especiais Os caracteres [ ] \ ^ $ . | ? * + ( ) são metacaracteres e devem ser precedidos de ”\” quando utilizados em buscas. Para buscar o texto ”1+1=2?” deve-se utilizar a expressão ”1\+1=2\?” Obs: Linguagens de programação podem necessitar de ”\” extra. Para buscar ”c:\windows” usa-se o pattern ”c:\\windows” e em Java a String ”c:\\\\windows”
Caracteres não-imprimíveis Caracter Código \t Horizontal Tab (0x09) \r Carriage Return (0x0d) \n New Line (0x0a) \a Bell (0x07) \e Escape (0x1b) \f Form Feed (0x0c) \v Vertical Tab(0x0b) \x00 Caracter (0x00) \uFFFF Unicode (0xffff)
Classes de caracteres Classes de caracteres ou conjuntos de caracteres indicam que qualquer um dos caracteres dentro do grupo são válidos para a busca.
São denotados com uma lista de caracteres entre colchetes: [abc] Ex: ”gr [ae] y” – encontra ”gr a y” ou ”gr e y” Podem ser escritos intervalos de caracteres usando um ”-”. Ex: [0-9a-fA-FxX] busca os caracteres usados para notação hexadecimal
Classes de caracteres (cont.) Ao utilizar o ”^” no início do grupo, significa negar o grupo, ou seja valem os caracteres que NÃO estão no grupo. Ex: q[^u] – qualquer caracter depois de ”q”, que não seja ”u” Além desses, existem as abreviações para classes de caracteres, como abaixo:
Classes de caracteres (cont.) Classe Expressão \w Word Character [A-Za-z0-9] \W Non Word Character  [^A-Za-z0-9] \s Whitespace Character [ \t\r\n] \S Non Whitespace Character [ \t\r\n] \d Digit [0-9] \D Non Digit [^0-9]
Ponto O metacaracter mais utilizado em regex
Reconhece todos os caracteres com excessão de nova linha
Single-line mode altera este comportamento
Ancoras ^ define o início da linha (ou da string)
$ define o final da linha (ou da string) Ex: ”^a” para encontrar strings que começam com ”a” Pode ser utilizado o modo multi-line para capturar string de várias linhas
\b também é uma ancora que valida os limites das palavras
Alternação O metacaracter ”|” serve para definir alternação. Ex: ”a|b|c” significa ”a”  ou  ”b”  ou  ”c”
É o metacaracter de menor prioridade ou seja ”cao|gato” significa ”cao”  ou  ”gato”
Cuidado com a ordem das expressões: ”Get|GetValue” é valido para ”GetValue” e ”GetXXX”
Item opcional O metacaracter ”?” serve para indicar uma expressão opcional. Ex: ”colou?r” encontra ”color”  e  ”colour” É um metacaracter ganancioso (greddy) ou seja possui preferencia por encontrar um positivo à um negativo. Ex: A expressão ”23(rd)?” encontra ”23rd” em ”Feb, 23rd” e não apenas 23.
Repetição Os metacaracters ”*” e ”+” significam respectivamente ”zero ou mais vezes” e ”uma ou mais vezes” Ex.: ”ab*c” encontra ”abc”, ”abbc” e ”ac”, enquanto ”ab+c” não encontra ”ac” Existem também ”{n} e ”{m,n}” que significam ”n vezes” e ”de m até n vezes”
”*” é equivalente a ”{0,}” e ”+” é equivalente a ”{1,}”
Repetição (cont.) ” *”, ”+” e ”{m,n}” são expressões  greedy  ou seja, tentarão encontrar o maior número de correspondências possíveis. Ex: ”<.+>” em ”This is a <EM>empty</EM> test”  encontrará ”<EM>empty</EM>” Colocar ”?” após ”*”, ”+”, ”{,}” e ”?” torna a expressão relutante ( reluctant ). Ex: ”<.+?>” na mesma expressão retorna ”<EM>” Uma alternativa é usar expressões negativas que são mais rápidas Ex: ”<[^>]+>” possui o mesmo efeito
Repetição (cont.) Existem também os qualificadores possessivos que não executam backtrack ou seja não retrocedem na busca.

Regex

  • 1.
  • 2.
    Regular Expressions Padrãopara buscas em textos
  • 3.
  • 4.
    Utilizado em várioseditores e ferramentas atuais, principalmente em ambiente unix.
  • 5.
    Possui extensões aopadrão original. Ex: Perl Compatible Reguar Extenstion (PCRE)
  • 6.
    Pattern / MatcherEngine regex é divido em 2 partes Pattern -> compila as expressoes
  • 7.
    Matcher -> executaas expressoes
  • 8.
    Literais Combinam extamentecom o padrão.Ex:
  • 9.
    Depende de opçõescomo case-insensitive Regex Padrão def abc def ghi a J a ck is a boy
  • 10.
    Caracteres especiais Oscaracteres [ ] \ ^ $ . | ? * + ( ) são metacaracteres e devem ser precedidos de ”\” quando utilizados em buscas. Para buscar o texto ”1+1=2?” deve-se utilizar a expressão ”1\+1=2\?” Obs: Linguagens de programação podem necessitar de ”\” extra. Para buscar ”c:\windows” usa-se o pattern ”c:\\windows” e em Java a String ”c:\\\\windows”
  • 11.
    Caracteres não-imprimíveis CaracterCódigo \t Horizontal Tab (0x09) \r Carriage Return (0x0d) \n New Line (0x0a) \a Bell (0x07) \e Escape (0x1b) \f Form Feed (0x0c) \v Vertical Tab(0x0b) \x00 Caracter (0x00) \uFFFF Unicode (0xffff)
  • 12.
    Classes de caracteresClasses de caracteres ou conjuntos de caracteres indicam que qualquer um dos caracteres dentro do grupo são válidos para a busca.
  • 13.
    São denotados comuma lista de caracteres entre colchetes: [abc] Ex: ”gr [ae] y” – encontra ”gr a y” ou ”gr e y” Podem ser escritos intervalos de caracteres usando um ”-”. Ex: [0-9a-fA-FxX] busca os caracteres usados para notação hexadecimal
  • 14.
    Classes de caracteres(cont.) Ao utilizar o ”^” no início do grupo, significa negar o grupo, ou seja valem os caracteres que NÃO estão no grupo. Ex: q[^u] – qualquer caracter depois de ”q”, que não seja ”u” Além desses, existem as abreviações para classes de caracteres, como abaixo:
  • 15.
    Classes de caracteres(cont.) Classe Expressão \w Word Character [A-Za-z0-9] \W Non Word Character [^A-Za-z0-9] \s Whitespace Character [ \t\r\n] \S Non Whitespace Character [ \t\r\n] \d Digit [0-9] \D Non Digit [^0-9]
  • 16.
    Ponto O metacaractermais utilizado em regex
  • 17.
    Reconhece todos oscaracteres com excessão de nova linha
  • 18.
    Single-line mode alteraeste comportamento
  • 19.
    Ancoras ^ defineo início da linha (ou da string)
  • 20.
    $ define ofinal da linha (ou da string) Ex: ”^a” para encontrar strings que começam com ”a” Pode ser utilizado o modo multi-line para capturar string de várias linhas
  • 21.
    \b também éuma ancora que valida os limites das palavras
  • 22.
    Alternação O metacaracter”|” serve para definir alternação. Ex: ”a|b|c” significa ”a” ou ”b” ou ”c”
  • 23.
    É o metacaracterde menor prioridade ou seja ”cao|gato” significa ”cao” ou ”gato”
  • 24.
    Cuidado com aordem das expressões: ”Get|GetValue” é valido para ”GetValue” e ”GetXXX”
  • 25.
    Item opcional Ometacaracter ”?” serve para indicar uma expressão opcional. Ex: ”colou?r” encontra ”color” e ”colour” É um metacaracter ganancioso (greddy) ou seja possui preferencia por encontrar um positivo à um negativo. Ex: A expressão ”23(rd)?” encontra ”23rd” em ”Feb, 23rd” e não apenas 23.
  • 26.
    Repetição Os metacaracters”*” e ”+” significam respectivamente ”zero ou mais vezes” e ”uma ou mais vezes” Ex.: ”ab*c” encontra ”abc”, ”abbc” e ”ac”, enquanto ”ab+c” não encontra ”ac” Existem também ”{n} e ”{m,n}” que significam ”n vezes” e ”de m até n vezes”
  • 27.
    ”*” é equivalentea ”{0,}” e ”+” é equivalente a ”{1,}”
  • 28.
    Repetição (cont.) ”*”, ”+” e ”{m,n}” são expressões greedy ou seja, tentarão encontrar o maior número de correspondências possíveis. Ex: ”<.+>” em ”This is a <EM>empty</EM> test” encontrará ”<EM>empty</EM>” Colocar ”?” após ”*”, ”+”, ”{,}” e ”?” torna a expressão relutante ( reluctant ). Ex: ”<.+?>” na mesma expressão retorna ”<EM>” Uma alternativa é usar expressões negativas que são mais rápidas Ex: ”<[^>]+>” possui o mesmo efeito
  • 29.
    Repetição (cont.) Existemtambém os qualificadores possessivos que não executam backtrack ou seja não retrocedem na busca.

Notas do Editor

  • #3 Ex: Editor de texto Serve tanto para busca como para replace Além de expressoes possue variantes: Posix, PCRE, Java, .Net Formado por sequencias e metacaracteres
  • #8 Em java podem ser utilizados teoria dos conjuntos
  • #10 Java -&gt; Posix Expressions
  • #11 Dot é o mais error-prone Não é meta dentro de [ ]
  • #12  -&gt; ancora de tamanho zero
  • #16 Primeiro executará ”.” até o fim e depois volta (backtrack) até ”&lt;/EM&gt;” -&gt; Demonstrar
  • #19 Referencias podem ser utilizadas em editores para a substituicao de palavras
  • #20 - Exemplo interessante -  -&gt; necessário para separar palavra (backtrack) - grupo de captura é sobrescrito pela última captura - (x)(y) -&gt; 21
  • #21 Grupo atomo e qualificadores possessivos sao equivalentes Demonstrar backtrack -&gt; depois de encontrar bc, esquece o backreference e c nao valida
  • #22 Apenas um teste, não é incluído no resultado da busca
  • #23 Somente retorna ”q” na expressão diferente do exemplo da classe que retorna qu
  • #25 Otimizando 1 -&gt; pode-se remover  pois ja foi encontrado no lookahea Otimizando 2 -&gt; w{0,3} é mais eficiente que w*