SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
([01][0-9]|2[0-3]):([0-5][0-9])

    Expressões Regulares

              André Willik Valenti

                Dextra Sistemas
Minicurso?
 Mote:
  Foco no basicão
 Objetivos:
  Apresentar assunto de forma prática
  Despertar interesse
  Dar o pontapé inicial
Expressões Regulares?
 Maneira elegante de manipular strings
 Sintaxe própria e relativamente padronizada
 Onipresente
   Linguagens de programação
   Editores de texto
   Ferramentas de desenvolvimento em geral
Para que servem
 Encontrar texto
 Processar texto
 Substituir texto
Aplicações
 Validação de entradas

 Aplicação de máscaras em campos
    CPF, datas, códigos etc.


 Filtragem de resultados em consultas

 (...)
Expressões regulares por aí
 URLs
 Endereços de e-mail
 Datas
 Caminhos de arquivo
 Trechos de código fonte
 (...)
Vc já usou e talvez nem saiba!
 SELECT * FROM pessoa WHERE
 sobrenome LIKE '%Silva%';

 ls *.txt

 dir *.sys
Como funcionam
 Essência
  Casamento de padrões
  Quantificadores
  Classes de caracteres
Como funcionam
 Casamento de padrões
  Padrão:
    aro
  Casa com:
    aro (posição 0)
    caro (posição 1)
    Amparo (posição 3)
Como funcionam
 Quantificadores
  1 ou mais: +
  0 ou mais: *
  0 ou 1: ?
 Exemplos
  a  ‘a’
  a+   ‘a’, ‘aa’, ‘aaa’, ...
  a*  ‘’, ‘a’, ‘aa’, ‘aaa’, ...
  a?   ‘’, ‘a’
Como funcionam
 Exemplos
  ab+c    ‘abc’, ‘abbc’, ‘abbbc’...
  ab?c    ‘ac’, ‘abc’
  ab*c   ‘ac’, ‘abc’, ‘abbc’, ‘abbbc’...
Como funcionam
 Classes de caracteres
  Dígito: d
  Letra: [A-Z], [a-z], [a-zA-Z]
  Letra, dígito ou ‘_’: w
 Exemplos:
  ddd    ‘000’, ‘012’, ‘321’, ‘999’, ‘821’, ...
  [a-z]w    ‘aa’, ‘ba’, ‘xy’, ‘zh’, ‘a1’, ‘x9’, ‘m_’...
  [A-Z]dd    ‘B12’, ‘P36’, ‘X89’, ...
Exemplos mais realistas
 Nome (ex: 'Luciana')
   [A-Z][a-z]*

 Hora (ex: '12:34')
   dd:dd

 Nome de variável (ex: 'minha_var_2')
   w+
Demonstração...
Como funcionam
 Classes de caracteres
  Espaço em branco: s
  Conjunto de possibilidades: [ ]
  Qualquer caractere: .
 Exemplos:
  as*b    ‘ab’, ‘a b’, ‘a b’, ‘a        b’, ...
  var[XYZ]      ‘varX’, ‘varY’, ‘varZ’
  1.   ‘1a’, ‘12’, ‘1;’, ‘1$’, ‘1~’, ...
  .*   qualquer coisa que caiba em uma linha!
Como funcionam
 Classes de negação
  Tudo que não for dígito: D
  Tudo que não for letra, dígito ou ‘_’: W
  Tudo que não for espaço em branco: S
  Tudo que não estiver no conjunto: [^ ]
 Exemplos:
  ddD  ‘12b’, ‘99/’, ‘23 ’, ...
  [^abc]+   ‘d’, ‘ef’, ‘xyzdef’, ‘123’, ‘[]{}()’, ...
Como funcionam
 Operador “ou”
  |
 Exemplos:
  abc|xyz       ‘abc’, ‘xyz’
  a|d    ‘a’, ‘1’, ‘2’, ‘3’,...
  a|x|2|5: o mesmo que [ax25]
Grupos
 Agrupam trechos de strings
 Úteis para:
  Extrair partes interessantes da string
  Substituir texto
Grupos
 Exemplo:
  HH:MM
  dd:dd valida a string
  Mas podemos fazer mais...
Grupos
 Exemplo:
  20:32
    Não nos interessa muito a string “20:32”
    Interessam-nos mais as substrings “20” e “32”
  (dd):(dd)
    Agrupamos partes da expressão regular
    Podemos recuperar os grupos usando 1, 2 etc.
Demonstração...
Expressões regulares por aí...
 Java
  import java.util.regex.Pattern;

  String regex = "dd:dd";
  Pattern.matches(regex, "12:34")
    true


  "uma str aqui".replaceAll("s", "_")
    "uma_string_aqui"
Expressões regulares por aí...
 Python
   import re

  regex = r'(dd)/(dd)/(dddd)'
  match = re.match(regex, '13/04/2011')

  match.group(0)   ‘13/04/2011’
  match.group(1)   ‘13’
  match.group(2)   ‘04’
  match.group(3)   ‘2011’
Expressões regulares por aí...
 JavaScript
  var str = 'JavaScript !';

  var regex1 = /w/;
  str.replace(regex1, '#')
    '#avaScript !'

  var regex2 = /w/g;
  str.replace(regex2, '#')
    '########## !'
Expressões regulares por aí...
 Ruby
  /abcd/ =~ 'abc4'    0
  /abcd/ =~ '0123abc789'    4
  /abcd/ =~ '0123456'    nil

  match =
   /(dd):(dd)/.match('12:34')
  match[1]    '12'
  match[2]    '34'
Expressões regulares por aí...
 Ruby
  'abcd1234'.gsub(/d/, '-')
  'a12b'.gsub(/a(dd)b/, 'ab1')

  Vejamos no irb...
Exercícios
 Extrair DDD, prefixo e terminal de um
 telefone:
   “(16) 3202-3934”    “16”, “3202”, “3934”


 Extrair somente dígitos de CPF:
   “123.456.789-00”     “12345678900”

 Extrair somente as consoantes da frase:
   “eu sou a luz das estrelas”   “slzdsstrls”
Outros metacaracteres
 Início da string: ^
 Fim da string: $
 Exemplos:
   ^function
     Casa com ‘function’, mas não com ‘f = function() { }’
   42$
     Casa com ‘var v = 42’, mas não com ‘var v = 42;’
   ^algumPadraoAqui$
     Casa somente quando o padrão ocupa a linha inteira
Outros metacaracteres
 Fronteira de palavra: b
 Exemplo:
   b[A-Za-z]+b
    Casa com todas as palavras de um arquivo
Mais quantificadores...
 {exato}
   d{7}     números com exatamente 7 dígitos


 {minimo,maximo}
   [a-z]{5,8}    5 a 8 letras minúsculas


 {minimo,}
   [A-Z]{3,}    3 ou mais letras maiúsculas
Mais aplicações...
 grep
   svn st | grep –E '.*j(ava|s)'


 Endereço IP
  d{1,3}.d{1,3}.d{1,3}.d{1,3}
Mais aplicações...
 Horário – versão mais precisa
  ([01][0-9]|2[0-3]):([0-5][0-9])

 Nome de variável – versão mais precisa
  [A-Za-z_$][w$]*
Mais aplicações...
 Endereço IP – versão radical
  (25[0-5]|2[0-4][0-9]|[01]?[0-
  9][0-9]?).(25[0-5]|2[0-4][0-
  9]|[01]?[0-9][0-9]?).(25[0-
  5]|2[0-4][0-9]|[01]?[0-9][0-
  9]?).(25[0-5]|2[0-4][0-
  9]|[01]?[0-9][0-9]?)
Referências
 Documentação Python
  http://docs.python.org/release/2.7/library/re.html?
  highlight=regex#regular-expression-syntax


 Documentação Java
  http://download.oracle.com/javase/1.4.2/docs/api/j
  ava/util/regex/Pattern.html
Referências
 Regular-Expressions.info (possui tutorial)
   http://www.regular-expressions.info/
 Crucial Concepts Behind Advanced Regular
 Expressions
   http://www.smashingmagazine.com/2009/05/06/in
   troduction-to-advanced-regular-expressions/
 Visualizador de expressões regulares
   http://strfriend.com/
Apêndice
 Ideias para futuros temas
   JPA – Java Persistence API
   Tratamento de exceções
   Desenvolvimento para iPhone / Android
   jQuery

Mais conteúdo relacionado

Mais procurados

5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUACândido Sales Gomes
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3garux
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5garux
 
Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05thomasdacosta
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1garux
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarCRISLANIO MACEDO
 
De bem com as expressões regulares
De bem com as expressões regularesDe bem com as expressões regulares
De bem com as expressões regularesFlávio Silveira
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Elaine Cecília Gatto
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesCRISLANIO MACEDO
 
Regular Expressions - PET presentation
Regular Expressions - PET presentationRegular Expressions - PET presentation
Regular Expressions - PET presentationFábio Albuquerque
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Curso De Shell Aula 6
Curso De Shell   Aula 6Curso De Shell   Aula 6
Curso De Shell Aula 6Felipe Santos
 

Mais procurados (20)

5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Perl Moderno, dia1
Perl Moderno, dia1Perl Moderno, dia1
Perl Moderno, dia1
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 
Atribuições
AtribuiçõesAtribuições
Atribuições
 
De bem com as expressões regulares
De bem com as expressões regularesDe bem com as expressões regulares
De bem com as expressões regulares
 
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
pSets TSI32B - Estrutura, Pesquisa e Ordenação de Dados (TSI UTFPR-Toledo)
 
Regex
RegexRegex
Regex
 
Standard ML / CPN ML
Standard ML / CPN MLStandard ML / CPN ML
Standard ML / CPN ML
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Haskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classesHaskell aula2 tipos-e-classes
Haskell aula2 tipos-e-classes
 
Regular Expressions - PET presentation
Regular Expressions - PET presentationRegular Expressions - PET presentation
Regular Expressions - PET presentation
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Poo com php
Poo com phpPoo com php
Poo com php
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Curso De Shell Aula 6
Curso De Shell   Aula 6Curso De Shell   Aula 6
Curso De Shell Aula 6
 

Destaque

Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)André Willik Valenti
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões RegularesRodrigo Branas
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado ServidorMario Guedes
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Delphi Conference 2011 - Desmistificando as Expressões Regulares
Delphi Conference 2011 - Desmistificando as Expressões RegularesDelphi Conference 2011 - Desmistificando as Expressões Regulares
Delphi Conference 2011 - Desmistificando as Expressões RegularesMario Guedes
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Mario Guedes
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryMario Guedes
 
Apresentação de slides pronto
Apresentação de slides prontoApresentação de slides pronto
Apresentação de slides prontocandidacbertao
 

Destaque (13)

Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
Minicurso de Encoding - resolvendo problemas com acentuação (#TDC2012 Goiânia)
 
Expressões regulares
Expressões regularesExpressões regulares
Expressões regulares
 
Expressões regulares
Expressões regularesExpressões regulares
Expressões regulares
 
Expressões Regulares: Teoria e Prática
Expressões Regulares: Teoria e PráticaExpressões Regulares: Teoria e Prática
Expressões Regulares: Teoria e Prática
 
JavaScript - Expressões Regulares
JavaScript - Expressões RegularesJavaScript - Expressões Regulares
JavaScript - Expressões Regulares
 
Cacheamento Lado Servidor
Cacheamento Lado ServidorCacheamento Lado Servidor
Cacheamento Lado Servidor
 
Comtec 2011
Comtec 2011Comtec 2011
Comtec 2011
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Delphi Conference 2011 - Desmistificando as Expressões Regulares
Delphi Conference 2011 - Desmistificando as Expressões RegularesDelphi Conference 2011 - Desmistificando as Expressões Regulares
Delphi Conference 2011 - Desmistificando as Expressões Regulares
 
Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática Nova Infraestrutura JSON: System.JSON na prática
Nova Infraestrutura JSON: System.JSON na prática
 
Code Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client LibraryCode Rage Brazil III - Tudo sobre o REST Client Library
Code Rage Brazil III - Tudo sobre o REST Client Library
 
Apresentação de slides pronto
Apresentação de slides prontoApresentação de slides pronto
Apresentação de slides pronto
 

Semelhante a Expressões Regulares: o basicão em 40

Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Danilo Pinotti
 
Programando em python tuplas e strings
Programando em python   tuplas e stringsProgramando em python   tuplas e strings
Programando em python tuplas e stringssamuelthiago
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funçõesCarla Lee
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsLeonardo Melo Santos
 
StringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões RegularesStringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões RegularesGabriel Matheus
 
StringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões RegularesStringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões RegularesSidneyCruz
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Mauricio Volkweis Astiazara
 

Semelhante a Expressões Regulares: o basicão em 40 (20)

Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Trabalho vetores
Trabalho vetoresTrabalho vetores
Trabalho vetores
 
Regex
RegexRegex
Regex
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Canivete shell
Canivete shellCanivete shell
Canivete shell
 
Vetores e Matrizes.pdf
Vetores e Matrizes.pdfVetores e Matrizes.pdf
Vetores e Matrizes.pdf
 
Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)Minicurso de Expressões Regulares (REGEX)
Minicurso de Expressões Regulares (REGEX)
 
Programando em python tuplas e strings
Programando em python   tuplas e stringsProgramando em python   tuplas e strings
Programando em python tuplas e strings
 
Fpar aula5
Fpar aula5Fpar aula5
Fpar aula5
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funções
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e StringsCurso de OO com C# - Parte 04 - Estruturas de controle e Strings
Curso de OO com C# - Parte 04 - Estruturas de controle e Strings
 
StringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões RegularesStringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões Regulares
 
StringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões RegularesStringBuilder, Caracteres e Expressões Regulares
StringBuilder, Caracteres e Expressões Regulares
 
Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)Estruturação de Linguagens de Programação (Pascal e C++)
Estruturação de Linguagens de Programação (Pascal e C++)
 
Php
PhpPhp
Php
 

Expressões Regulares: o basicão em 40

  • 1. ([01][0-9]|2[0-3]):([0-5][0-9]) Expressões Regulares André Willik Valenti Dextra Sistemas
  • 2. Minicurso? Mote: Foco no basicão Objetivos: Apresentar assunto de forma prática Despertar interesse Dar o pontapé inicial
  • 3. Expressões Regulares? Maneira elegante de manipular strings Sintaxe própria e relativamente padronizada Onipresente Linguagens de programação Editores de texto Ferramentas de desenvolvimento em geral
  • 4. Para que servem Encontrar texto Processar texto Substituir texto
  • 5. Aplicações Validação de entradas Aplicação de máscaras em campos CPF, datas, códigos etc. Filtragem de resultados em consultas (...)
  • 6. Expressões regulares por aí URLs Endereços de e-mail Datas Caminhos de arquivo Trechos de código fonte (...)
  • 7. Vc já usou e talvez nem saiba! SELECT * FROM pessoa WHERE sobrenome LIKE '%Silva%'; ls *.txt dir *.sys
  • 8. Como funcionam Essência Casamento de padrões Quantificadores Classes de caracteres
  • 9. Como funcionam Casamento de padrões Padrão: aro Casa com: aro (posição 0) caro (posição 1) Amparo (posição 3)
  • 10. Como funcionam Quantificadores 1 ou mais: + 0 ou mais: * 0 ou 1: ? Exemplos a ‘a’ a+ ‘a’, ‘aa’, ‘aaa’, ... a* ‘’, ‘a’, ‘aa’, ‘aaa’, ... a? ‘’, ‘a’
  • 11. Como funcionam Exemplos ab+c ‘abc’, ‘abbc’, ‘abbbc’... ab?c ‘ac’, ‘abc’ ab*c ‘ac’, ‘abc’, ‘abbc’, ‘abbbc’...
  • 12. Como funcionam Classes de caracteres Dígito: d Letra: [A-Z], [a-z], [a-zA-Z] Letra, dígito ou ‘_’: w Exemplos: ddd ‘000’, ‘012’, ‘321’, ‘999’, ‘821’, ... [a-z]w ‘aa’, ‘ba’, ‘xy’, ‘zh’, ‘a1’, ‘x9’, ‘m_’... [A-Z]dd ‘B12’, ‘P36’, ‘X89’, ...
  • 13. Exemplos mais realistas Nome (ex: 'Luciana') [A-Z][a-z]* Hora (ex: '12:34') dd:dd Nome de variável (ex: 'minha_var_2') w+
  • 15. Como funcionam Classes de caracteres Espaço em branco: s Conjunto de possibilidades: [ ] Qualquer caractere: . Exemplos: as*b ‘ab’, ‘a b’, ‘a b’, ‘a b’, ... var[XYZ] ‘varX’, ‘varY’, ‘varZ’ 1. ‘1a’, ‘12’, ‘1;’, ‘1$’, ‘1~’, ... .* qualquer coisa que caiba em uma linha!
  • 16. Como funcionam Classes de negação Tudo que não for dígito: D Tudo que não for letra, dígito ou ‘_’: W Tudo que não for espaço em branco: S Tudo que não estiver no conjunto: [^ ] Exemplos: ddD ‘12b’, ‘99/’, ‘23 ’, ... [^abc]+ ‘d’, ‘ef’, ‘xyzdef’, ‘123’, ‘[]{}()’, ...
  • 17. Como funcionam Operador “ou” | Exemplos: abc|xyz ‘abc’, ‘xyz’ a|d ‘a’, ‘1’, ‘2’, ‘3’,... a|x|2|5: o mesmo que [ax25]
  • 18. Grupos Agrupam trechos de strings Úteis para: Extrair partes interessantes da string Substituir texto
  • 19. Grupos Exemplo: HH:MM dd:dd valida a string Mas podemos fazer mais...
  • 20. Grupos Exemplo: 20:32 Não nos interessa muito a string “20:32” Interessam-nos mais as substrings “20” e “32” (dd):(dd) Agrupamos partes da expressão regular Podemos recuperar os grupos usando 1, 2 etc.
  • 22. Expressões regulares por aí... Java import java.util.regex.Pattern; String regex = "dd:dd"; Pattern.matches(regex, "12:34") true "uma str aqui".replaceAll("s", "_") "uma_string_aqui"
  • 23. Expressões regulares por aí... Python import re regex = r'(dd)/(dd)/(dddd)' match = re.match(regex, '13/04/2011') match.group(0) ‘13/04/2011’ match.group(1) ‘13’ match.group(2) ‘04’ match.group(3) ‘2011’
  • 24. Expressões regulares por aí... JavaScript var str = 'JavaScript !'; var regex1 = /w/; str.replace(regex1, '#') '#avaScript !' var regex2 = /w/g; str.replace(regex2, '#') '########## !'
  • 25. Expressões regulares por aí... Ruby /abcd/ =~ 'abc4' 0 /abcd/ =~ '0123abc789' 4 /abcd/ =~ '0123456' nil match = /(dd):(dd)/.match('12:34') match[1] '12' match[2] '34'
  • 26. Expressões regulares por aí... Ruby 'abcd1234'.gsub(/d/, '-') 'a12b'.gsub(/a(dd)b/, 'ab1') Vejamos no irb...
  • 27. Exercícios Extrair DDD, prefixo e terminal de um telefone: “(16) 3202-3934” “16”, “3202”, “3934” Extrair somente dígitos de CPF: “123.456.789-00” “12345678900” Extrair somente as consoantes da frase: “eu sou a luz das estrelas” “slzdsstrls”
  • 28. Outros metacaracteres Início da string: ^ Fim da string: $ Exemplos: ^function Casa com ‘function’, mas não com ‘f = function() { }’ 42$ Casa com ‘var v = 42’, mas não com ‘var v = 42;’ ^algumPadraoAqui$ Casa somente quando o padrão ocupa a linha inteira
  • 29. Outros metacaracteres Fronteira de palavra: b Exemplo: b[A-Za-z]+b Casa com todas as palavras de um arquivo
  • 30. Mais quantificadores... {exato} d{7} números com exatamente 7 dígitos {minimo,maximo} [a-z]{5,8} 5 a 8 letras minúsculas {minimo,} [A-Z]{3,} 3 ou mais letras maiúsculas
  • 31. Mais aplicações... grep svn st | grep –E '.*j(ava|s)' Endereço IP d{1,3}.d{1,3}.d{1,3}.d{1,3}
  • 32. Mais aplicações... Horário – versão mais precisa ([01][0-9]|2[0-3]):([0-5][0-9]) Nome de variável – versão mais precisa [A-Za-z_$][w$]*
  • 33. Mais aplicações... Endereço IP – versão radical (25[0-5]|2[0-4][0-9]|[01]?[0- 9][0-9]?).(25[0-5]|2[0-4][0- 9]|[01]?[0-9][0-9]?).(25[0- 5]|2[0-4][0-9]|[01]?[0-9][0- 9]?).(25[0-5]|2[0-4][0- 9]|[01]?[0-9][0-9]?)
  • 34. Referências Documentação Python http://docs.python.org/release/2.7/library/re.html? highlight=regex#regular-expression-syntax Documentação Java http://download.oracle.com/javase/1.4.2/docs/api/j ava/util/regex/Pattern.html
  • 35. Referências Regular-Expressions.info (possui tutorial) http://www.regular-expressions.info/ Crucial Concepts Behind Advanced Regular Expressions http://www.smashingmagazine.com/2009/05/06/in troduction-to-advanced-regular-expressions/ Visualizador de expressões regulares http://strfriend.com/
  • 36. Apêndice Ideias para futuros temas JPA – Java Persistence API Tratamento de exceções Desenvolvimento para iPhone / Android jQuery