Expressões regulares

15
Expressões Regulares Ricardo Paiva (Senior Developer @ Globo.com)

Transcript of Expressões regulares

Page 1: Expressões regulares

Expressões RegularesRicardo Paiva (Senior Developer @ Globo.com)

Page 2: Expressões regulares

Propósito

g/<regular expression>/p

(a|b)*abb

● Linguagem de definição de padrões de pesquisa em uma string

● Linguagem regular

Page 3: Expressões regulares

Ferramentas onipresentesUnix commands:

grep, sed, awk...Linguagens de programação

C, Perl, Java, JavaScript, Perl, Ruby, PHP...Bancos de dados

MySQL, Oracle, SQL Server, Virtuoso, Elastic Search…

FerramentasNginx, Apache...

Page 4: Expressões regulares

SubstringExpressões Regulares fazem busca de substrings.Por pardrão, é sensível a maiúsculas e minúsculas

re.search("ab", "aaabaaa") # Truere.search("zz", "aaabaaa") # Falsere.search("AB", "aaabaaa") # False

re.search("Globo", "Globo.com") # True

Page 5: Expressões regulares

Conjunto de Caracteres[ ] : Define um conjunto de caracteres - : Definir um intervalo de símbolos dentro do []

[abc] # Procura as letras 'a', 'b' ou 'c'[,|] # Procura os símbolos ',' ou '|'[1234] # Procura os numerais 1, 2, 3 ou 4[0-9] # Procura por números[a-z] # Procura por letras[a-zA-Z0-9] # Procura por letras maiúsculas, # minúsculas e números

Page 6: Expressões regulares

Posição dos Caracteres^ - Início da string$ - Final da string

^a # string começa por a^[a-z] # string começa por uma letra[0-9]$ # termina por um número^[0-9]$ # string contem apenas um número^R[0-9] # começa pela letra 'R' seguida de um número^$ # string vazia

Page 7: Expressões regulares

Repetições* - 0 ou mais repetições+ - 1 ou mais repetições (pelo menos uma)? - 0 ou nenhuma repetição

a*b # 'b' precedido ou não por vários 'a' ("b", "ab", "aab", "aaaab"...)a[0-9]+ # 'a' seguido de pelo menos 1 número-?[0-9] # um número precedido ou não por '-'[a-z]+[,.!]? # Pelo menos 1 letra seguida ou não pelos símbolos ',' ou '.' ou '?'

Page 8: Expressões regulares

Quantidade de repetições{n,m} - no mínimo n, no máximo m repetições{n} - exatamente n repetições{n,} - no mínimo n repetições{,m} - até m repetições

[0-9]{2} # 2 dígitos[a-z]{2,4} # no mínimo 2, no máximo 4 letrasR[0-9]{2,} # letra R seguida de pelo menos 2 dígitos{0,} # o mesmo que *{1,} # o mesmo que +{0,1} # o mesmo que ?

Page 9: Expressões regulares

Agrupamento em blocos() - Agrupa parte da regra

nome(<br/>)? # palavra nome seguida ou não de <br/>( ?[0-9])+ # lista de números

Page 10: Expressões regulares

Conjuntos especiais. - Para se referir a qualquer símbolo[^] - Todos os símbolos menos os listados

<p>.+</p> # uma tag de parágrafo não vazia

http://techtudo.com.br/[^/]+/plantao/2.html # path entre o domínio e a pasta /plantão

não pode ter /

Page 11: Expressões regulares

Alternativa| - Alterna entre 2 ou mais expressões dentro de ()

(avi|mpg)$ # Termina por avi ou mpg

(0?[1-9]|[1-2][0-9]|3[0-1]) # Número de 0 a 31

Page 12: Expressões regulares

Escape\ - Elimina a natureza especial de um símbolo

\.jpg$ # termina pelo símbolo "." seguido de jpg

\([0-9]+\) # um número cercado por ()

Page 13: Expressões regulares

Módulo re do Python

import rematch = re.search("[0-9]", "notas: 7, 3, 6")match.group(0) # 7match.group(1) # IndexError

match = re.findall("[0-9]", "notas: 7, 3, 6")match # [7, 3, 6] (uma lista)

re.split("[,;]", "aa,b;cc") # ["aa", "b", "cc"]pattern = re.compile("$ [0-9]+")pattern.match("$ 31")pattern.match("$ 452")

Page 14: Expressões regulares

Sequências especiais\d - equivalente a [0-9]\D - equivalente a [^0-9]\s - caracteres de espaço [ \t\n\r\f\v]\w - equivalente a [a-zA-Z0-9_]\W - equivalente a [^a-zA-Z0-9_]

\d,\d # número com vírgula\w(\.\w)* # palavra seguida de 0 ou mais .palavra