Entendendo e aplicando expressões regulares em C# - Parte 1<br />Conteúdo teórico embasado no livro: Expressões regulares ...
Agenda<br />Introdução<br />Definição<br />Origem<br />Aplicações<br />Metacaracteres<br />Representantes<br />Quantificad...
Introdução<br />Quantos de nós já necessitaram fazer manipulação ou pesquisas em textos? Quantos perderam horas com ifs e ...
Introdução<br />Um dos melhores materiais, didáticos, em português (se não o melhor) sobre este assunto é o livro em que a...
Definição<br />“Uma expressão regular é um método formal de se especificar um padrão de texto.”<br />De forma simplificada...
Origem<br />Surgiu em 1943 com um estudo que teorizava o funcionamento dos nossos neurônios<br />Em 1968 foi para o comput...
Aplicações<br />“Basicamente servem para você dizer algo abrangente de forma específica. Definido seu padrão de busca, voc...
Metacaracteres<br />São símbolos com funções específicas utilizados para montar as expressões regulares.<br />Existem vári...
Representante Ponto: o necessitado .<br />“O ponto é nosso curinga solitário, que está sempre à procura de um casamento, n...
RepresentanteLista: a exigente [...]<br />“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exata...
RepresentanteLista: a exigente [...]<br />“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exata...
RepresentanteLista: a exigente [...]<br />“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exata...
RepresentanteLista: a exigente [...]<br />O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual ...
RepresentanteLista: a exigente [...]<br />O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual ...
RepresentanteLista: a exigente [...]<br />Os colchetes fazem parte da classe POSIX.<br />Uma classe dentro de uma lista fi...
Representante Lista negada : a experiente [^...]<br />“Nem tão exigente quanto a lista nem tão necessitada quanto o ponto,...
QuantificadorOpcional: o opcional ?<br />“O opcional é um quantificador que não esquenta a cabeça, para ele pode ter ou nã...
QuantificadorAsterisco: o tanto-faz *<br />“Se o opcional já não esquenta a cabeça, podendo ter ou não a entidade anterior...
QuantificadorMais: o tem-que-ter +<br />“A única diferença [do mais e do asterisco] é que o mais não é opcional, então a e...
QuantificadorChaves: o controle {m,m}<br />“Aqui Chaves não é o au?tor mexicano preferido de 10 entre 10 brasileiros. As c...
ÂncoraCircunflexo: o início ^<br />“O nosso amigo circunflexo (êta nome comprido e chato) marca o começo de uma linha. Nad...
ÂncoraCifrão: o fim $<br />“Similar e complementar ao circunflexo, o cifrão marca o fim de uma linha e só é válido no fina...
ÂncoraBorda: a limítrofe b<br />“A outra âncora que temos é a borda, que como o próprio nome já diz, marca uma borda, mais...
Exemplos interativos<br />http://www.piazinho.com.br/#exemplos<br />
Exercícios<br />Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve-l...
Respostas<br />1. Reconheça a palavra carro no plural e no singular.<br />“carros?”<br />2. Reconheça a palavra casa em qu...
Let´scode<br />		Codificação simplificada em C#<br />usingSystem.Text.RegularExpressions; (Biblioteca)<br />stringcontent=...
Debate e esclarecimentos<br />
Definições para próximas partes<br />Parte 1 – Entendendo e aplicando expressões regulares em C# <br />Parte 2 – Estudando...
Referências<br />Livro: Expressões regulares – Uma abordagem divertida<br />http://aurelio.net/<br />http://pt.wikipedia.o...
Entendendo e aplicando expressões regulares em C# - Parte 1<br />Obrigado!<br />Lorival SmolskiChapuis<br />http://blog.lo...
Próximos SlideShares
Carregando em…5
×

Bit2Bit - Expressões regulares - Parte 1

2.477 visualizações

Publicada em

Apresentação do grupo Bit2Bit sobre Expressões regulares.
Baseado no livro "Expressões regulares - Uma abordagem divertida"

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.477
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
62
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Bit2Bit - Expressões regulares - Parte 1

  1. 1. Entendendo e aplicando expressões regulares em C# - Parte 1<br />Conteúdo teórico embasado no livro: Expressões regulares – Uma abordagem divertida<br />Aurélio Marinho Jargas – www.aurelio.net<br />Lorival SmolskiChapuis<br />http://blog.lorival.com- lorival@chapuis.com.br - @lorivalsc<br />
  2. 2. Agenda<br />Introdução<br />Definição<br />Origem<br />Aplicações<br />Metacaracteres<br />Representantes<br />Quantificadores<br />Âncoras<br />Exercícios<br />Let´scode<br />Debate e esclarecimentos<br />Referências<br />
  3. 3. Introdução<br />Quantos de nós já necessitaram fazer manipulação ou pesquisas em textos? Quantos perderam horas com ifs e fors tentando procurar palavras baseadas em um determinado padrão?<br />As expressões regulares, quando bem aplicadas e refinadas, permitem manipular textos de forma rápida e precisa.<br />Infelizmente não existe um vasto material sobre este assunto em português. A maioria não é muito didática na hora de explicar os conceitos e aplicar na prática. <br />Isto faz com que poucos desenvolvedores dominem este poderoso assunto que bem aplicado economiza horas de desenvolvimento.<br />
  4. 4. Introdução<br />Um dos melhores materiais, didáticos, em português (se não o melhor) sobre este assunto é o livro em que a maior parte teórica, sobre expressões regulares, desta apresentação está embasada: Expressões regulares – Uma abordagem divertida de Aurélio Marinho Jargas.<br />A maioria do material sobre expressões regulares em português encontrado na internet é baseado no livro dele.<br />Esta apresentação irá introduzi-lo neste assunto, fazendo expressões como *[A-Za-z0-9_]+:(.*)..$ se tornarem compreensivas e não lhe causar pânico. <br />Em toda apresentação, o que estiver entre aspas duplas foi copiado na integra do livro<br />“CURIOSIDADE: apesar de esse assunto ser antigo, o que vamos ver aqui basicamente é o mesmo que um estudante veria há 15 anos atrás. É um conceito consistente, que não sofre alterações com o passar do tempo.”<br />
  5. 5. Definição<br />“Uma expressão regular é um método formal de se especificar um padrão de texto.”<br />De forma simplificada, uma regular expression, termo original, é uma composição de símbolos e caracteres literais com funções definidas que quando agrupadas em sequência formam uma expressão. <br />Essa, por sua vez, é interpretada, por um programa, como uma regra que resultará em sucesso caso uma entrada de dados atenda suas condições. <br />Também podemos afirmar que é:<br />“uma maneira de procurar um texto que você não lembra exatamente como é, mas tem ideia das variações possíveis; <br />uma maneira de procurar um trecho em posições específicas como no começo ou no fim de uma linha, ou palavra; <br />uma maneira de um programador especificar padrões complexos que podem ser procurados e casados em uma cadeia de caracteres”; <br />
  6. 6. Origem<br />Surgiu em 1943 com um estudo que teorizava o funcionamento dos nossos neurônios<br />Em 1968 foi para o computador em um algoritmo de busca para um editor chamado qed<br />O qed virou ed (Editor Unix) que devido a seu comando de executar expressões regulares originou o famoso grep que por sua vez originou o egrep<br />
  7. 7. Aplicações<br />“Basicamente servem para você dizer algo abrangente de forma específica. Definido seu padrão de busca, você tem uma lista (finita ou não) de possibilidades de casamento. Em um exemplo rápido, [rgp]ato pode casar rato, gato e pato. Ou seja, sua lista "abrange especificamente" essas três palavras, nada mais.”<br />Sempre que precisar efetuar buscas ou validações em textos, as expressões regulares funcionam muito bem. Alguns exemplos de buscas por padrões, em textos, são:<br />data<br />horário<br />número IP<br />endereço de e-mail<br />endereço de Internet<br />dados na coluna N de um texto<br />dados que estão entre <tags></tags><br />campos específicos de um texto tabulado<br />número de telefone, RG, CPF, cartão de crédito<br />
  8. 8. Metacaracteres<br />São símbolos com funções específicas utilizados para montar as expressões regulares.<br />Existem vários tipos de metacaracteres, os básicos serão estudados nesta apresentação:<br />Representes: representam um ou mais caracteres<br />Quantificadores: indicam o número de repetições permitidas para o caractere anterior<br />Âncoras: marcam uma posição específica na linha<br />
  9. 9. Representante Ponto: o necessitado .<br />“O ponto é nosso curinga solitário, que está sempre à procura de um casamento, não importa com quem seja. Pode ser um número, uma letra, um TAB, um @, o que vier ele traça, pois o ponto casa qualquer coisa.”<br />Lembre-se: o ponto aceita qualquer caractere.<br />
  10. 10. RepresentanteLista: a exigente [...]<br />“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.”<br />No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo...<br />Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o<br />
  11. 11. RepresentanteLista: a exigente [...]<br />“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.”<br />No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo...<br />Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o<br />O ponto não aceita qualquer coisa?<br />Dentro da lista, todos os caracteres são normais<br />
  12. 12. RepresentanteLista: a exigente [...]<br />“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabe exatamente o que quer, e nada diferente daquilo, a lista casa com quem ela conhece.”<br />No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo...<br />Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o<br />O ponto não aceita qualquer coisa?<br />Dentro da lista, todos os caracteres são normais, exceto o traço.<br />
  13. 13. RepresentanteLista: a exigente [...]<br />O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]<br />Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ...<br />“Os intervalos respeitama ordem numérica da tabela ASCII”<br />O traço colocamos no final da lista sozinho;<br />O colchete de abertura ( [ ) pode colocar em qualquer lugar;<br />O colchete de fechamento ( ] ) deve ser colocado no começo da lista;<br />Exemplo: [ ][ - ]<br />Como colocar o traço e os colchetes dentro da lista se eles são metacaracteres?<br />
  14. 14. RepresentanteLista: a exigente [...]<br />O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]<br />Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ...<br />“Os intervalos respeitama ordem numérica da tabela ASCII”<br />O traço colocamos no final da lista sozinho;<br />O colchete de abertura ( [ ) pode colocar em qualquer lugar;<br />O colchete de fechamento ( ] ) deve ser colocado no começo da lista;<br />Exemplo: [ ][ - ]<br />Peraí! Na tabela ASCII a-z não entram as palavras acentuadas, e agora?<br />Dá para resolver isto com alguns curingas, mas...<br />...Vamos conhecer as classes de caracteres POSIX<br />Como colocar o traço e os colchetes dentro da lista se eles são metacaracteres?<br />
  15. 15. RepresentanteLista: a exigente [...]<br />Os colchetes fazem parte da classe POSIX.<br />Uma classe dentro de uma lista ficaria assim:<br />[[:upper:]]<br />IMPORTANTE: As classes POSIX levam em consideração a localidade.<br />
  16. 16. Representante Lista negada : a experiente [^...]<br />“Nem tão exigente quanto a lista nem tão necessitada quanto o ponto, temos a lista negada, que pelas suas más experiências passadas, sabe o que não serve para ela casar.”<br />A lista negada é igual a lista comum, a única diferença é que ela aceitará todos os caracteres que NÃO tiverem dentro da lista. Ex: l[^aeioAEIO]a – lua, l1a, lpa... <br />IMPORTANTE: A lista negada não casa com espaço vazio. No exemplo acima ela NÃO aceitaria l a (l, espaço, a). É necessário ter um caractere diferente.<br />Deve ser colocado no final. Ex: [^:a-z123^]<br />Como colocar o ^ dentro da lista se eles são metacaracteres?<br />
  17. 17. QuantificadorOpcional: o opcional ?<br />“O opcional é um quantificador que não esquenta a cabeça, para ele pode ter ou não a ocorrência da entidade anterior, pois ele a repete 0 ou 1 vez.”<br />Já estamos aceitando algo abrangente de forma específica. Lembra do slide “Aplicações”? <br />
  18. 18. QuantificadorAsterisco: o tanto-faz *<br />“Se o opcional já não esquenta a cabeça, podendo ter ou não a entidade anterior, o asterisco é mais tranqüilo ainda, pois para ele pode ter, não ter, ou ter vários, infinitos. Em outras palavras, a entidade anterior pode aparecer em qualquer quantidade.”<br />Um curinga na manga<br />Vimos o metacaractere . (ponto) que aceita qualquer caractere. Agora vimos o metacaractere * (asterisco) que aceita em qualquer quantidade. Olhe e pense na seguinte expressão: <br />.*<br />
  19. 19. QuantificadorMais: o tem-que-ter +<br />“A única diferença [do mais e do asterisco] é que o mais não é opcional, então a entidade anterior deve casar pelo menos uma vez, e pode ter várias.”<br />Simples, não?!<br />
  20. 20. QuantificadorChaves: o controle {m,m}<br />“Aqui Chaves não é o au?tor mexicano preferido de 10 entre 10 brasileiros. As chaves são a solução para uma quantificação mais controlada, onde se pode especificar exatamente quantas repetições se quer da entidade anterior.”<br />EX: a{1,2} – a, aa<br /> b{0,2}a – a, ba, bba<br />
  21. 21. ÂncoraCircunflexo: o início ^<br />“O nosso amigo circunflexo (êta nome comprido e chato) marca o começo de uma linha. Nada mais.”<br />Dentro da lista (e no início) o ^ tem o objetivo de negar seu conteúdo. Fora da lista ele serve para marcar que a palavra deve ser encontrada exatamente no início da linha. EX: ^[a-zA-Z].<br />Este metacaractere só é especial se tiver no começo da expressão regular. Se eu quiser procurar uma palavra que começe com ^ poderia fazer assim:<br />^^<br />Está gostando? Faltam apenas mais dois âncoras para finalizar a parte teórica desta apresentação.<br />
  22. 22. ÂncoraCifrão: o fim $<br />“Similar e complementar ao circunflexo, o cifrão marca o fim de uma linha e só é válido no final de uma ER.”<br />Que tal procurar por uma linha vazia? ^$<br />E uma linha que tenha entre 40 e 100 caracteres? ^.{20,60}$<br />As expressões estão ficando mais claro, não? Vamos finalizar o último metacaractere agora.<br />
  23. 23. ÂncoraBorda: a limítrofe b<br />“A outra âncora que temos é a borda, que como o próprio nome já diz, marca uma borda, mais especificamente, uma borda de palavra.”<br />Basicamente ela marca onde começa e onde termina uma palavra. Simples assim! Veja:<br />“Palavra” aqui engloba [A-Za-z0-9_], ou seja, letras, números e sublinhados. Por isto no exemplo acima bdiab aceitou bom-dia!, devido a exclamação e o traço não fazerem parte de uma palavra. Em alguns aplicativos o _ também não faz. =)<br />
  24. 24. Exemplos interativos<br />http://www.piazinho.com.br/#exemplos<br />
  25. 25. Exercícios<br />Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve-los antes de prosseguir.<br />Escreva uma expressão regular que:<br />1. Reconheça a palavra carro minúscula, no plural, singulare em qualquer parte de um texto.<br />2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de um texto.<br />3. Reconheça um número de IP, que aceite 999.999.999.999<br />Dica: O metacaracter “” torna outro metacaractere literal.<br />OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar de forma simples o entendimento da aplicação de expressões regulares e os operadores aprendidos nesta parte.<br />
  26. 26. Respostas<br />1. Reconheça a palavra carro no plural e no singular.<br />“carros?”<br />2. Reconheça a palavra casa em qualquer combinação de maiúscula e minúscula.<br />“[cC][aA][sS][aA]”<br />3. Reconheça um número de IP.<br />“[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]” <br />
  27. 27. Let´scode<br /> Codificação simplificada em C#<br />usingSystem.Text.RegularExpressions; (Biblioteca)<br />stringcontent= “Conteúdo a ser lido"; <br />Regexre= new Regex(“expressao_regular"); <br />if(re.IsMatch(content)) <br /> // Encontrou<br />else<br /> // Não encontrou<br />No site existe um exemplo para download codificando o trecho de código acima.<br />
  28. 28. Debate e esclarecimentos<br />
  29. 29. Definições para próximas partes<br />Parte 1 – Entendendo e aplicando expressões regulares em C# <br />Parte 2 – Estudando a biblioteca REGEX em C# e demais operadores básicos <br />Parte 3 – Conhecendo os operadores avançados e suas particularidades<br />Parte 4 – Mandamentos das expressões regulares, dicas e práticas em C#<br />Parte 5 – CodingDojo criando uma aplicação com todos os recursos estudados<br />(Esta aplicação é para uma empresa de publicidade e propaganda)<br />
  30. 30. Referências<br />Livro: Expressões regulares – Uma abordagem divertida<br />http://aurelio.net/<br />http://pt.wikipedia.org/wiki/Express%C3%A3o_regular<br />http://msdn.microsoft.com/en-us/library/ms228595(v=vs.80).aspx<br />
  31. 31. Entendendo e aplicando expressões regulares em C# - Parte 1<br />Obrigado!<br />Lorival SmolskiChapuis<br />http://blog.lorival.com- lorival@chapuis.com.br - @lorivalsc<br />

×