31
Bit 2 Bit Study Group http://blog.bit2bit.com.br [email protected] - @bit2bitgroup Entendendo e aplicando expressões regulares em C# - Parte 1 Lorival Smolski Chapuis http://blog.lorival.com - [email protected] - @lorivalsc Conteúdo teórico embasado no livro: Expressões regulares Uma abordagem divertida Aurélio Marinho Jargas www.aurelio.net

Bit2Bit - Expressões regulares - Parte 1

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Entendendo e aplicando expressões regulares em C# - Parte 1

Lorival Smolski Chapuishttp://blog.lorival.com - [email protected] - @lorivalsc

Conteúdo teórico embasado no livro: Expressões regulares – Uma abordagem divertidaAurélio Marinho Jargas – www.aurelio.net

Page 2: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

AgendaIntroduçãoDefiniçãoOrigemAplicaçõesMetacaracteres

– Representantes– Quantificadores– Âncoras

ExercíciosLet´s codeDebate e esclarecimentosReferências

Page 3: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

IntroduçãoQuantos de nós já necessitaram fazer manipulação ou pesquisas em textos?Quantos perderam horas com ifs e fors tentando procurar palavras baseadas emum determinado padrão?

As expressões regulares, quando bem aplicadas e refinadas, permitem manipulartextos de forma rápida e precisa.

Infelizmente não existe um vasto material sobre este assunto em português. Amaioria não é muito didática na hora de explicar os conceitos e aplicar na prática.

Isto faz com que poucos desenvolvedores dominem este poderoso assunto quebem aplicado economiza horas de desenvolvimento.

Page 4: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

IntroduçãoUm dos melhores materiais, didáticos, em português (se não o melhor) sobreeste assunto é o livro em que a maior parte teórica, sobre expressões regulares,desta apresentação está embasada: Expressões regulares – Uma abordagemdivertida de Aurélio Marinho Jargas.

A maioria do material sobre expressões regulares em português encontrado nainternet é baseado no livro dele.

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.

Em toda apresentação, o que estiver entre aspas duplas foi copiado na integra do livro

“CURIOSIDADE: apesar de esse assunto ser antigo, o que vamos ver aquibasicamente é o mesmo que um estudante veria há 15 anos atrás. É um conceitoconsistente, que não sofre alterações com o passar do tempo.”

Page 5: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Definição“Uma expressão regular é um método formal de se especificar um padrão de

texto.”

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.

Essa, por sua vez, é interpretada, por um programa, como uma regra que resultará em sucesso caso uma entrada de dados atenda suas condições.

Também podemos afirmar que é:

• “uma maneira de procurar um texto que você não lembra exatamente como é, mas tem ideia 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”;

Page 6: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

OrigemSurgiu em 1943 com um estudo que teorizava o funcionamento dos nossosneurônios

Em 1968 foi para o computador em um algoritmo de busca para um editorchamado qed

O qed virou ed (Editor Unix) que devido a seu comando de executar expressõesregulares originou o famoso grep que por sua vez originou o egrep

Page 7: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Aplicações“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) depossibilidades 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.”

Sempre que precisar efetuar buscas ou validações em textos, as expressõesregulares funcionam muito bem. Alguns exemplos de buscas por padrões, emtextos, são:• data• horário• número IP• endereço de e-mail• endereço de Internet• dados na coluna N de um texto• dados que estão entre <tags></tags>• campos específicos de um texto tabulado• número de telefone, RG, CPF, cartão de crédito

Page 8: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

MetacaracteresSão símbolos com funções específicas utilizados para montar as expressõesregulares.

Existem vários tipos de metacaracteres, os básicos serão estudados nestaapresentação:

– Representes: representam um ou mais caracteres– Quantificadores: indicam o número de repetições permitidas para o

caractere anterior– Âncoras: marcam uma posição específica na linha

Page 9: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Representante Ponto: o necessitado .

“O ponto é nosso curinga solitário, que está sempre à procura de umcasamento, 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.”

Lembre-se: o ponto aceita qualquer caractere.

Page 10: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

RepresentanteLista: a exigente [...]

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabeexatamente o que quer, e nada diferente daquilo, a lista casa com quem elaconhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitarvárias palavras como n o, n1o, noo, njo...

Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o

Page 11: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

RepresentanteLista: a exigente [...]

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabeexatamente o que quer, e nada diferente daquilo, a lista casa com quem elaconhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitarvárias palavras como n o, n1o, noo, njo...

Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o

O ponto não aceita qualquer coisa?Dentro da lista, todos os caracteres são normais

Page 12: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

RepresentanteLista: a exigente [...]

“Bem mais exigente que o ponto, a lista não casa com qualquer um. Ela sabeexatamente o que quer, e nada diferente daquilo, a lista casa com quem elaconhece.”

No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitarvárias palavras como n o, n1o, noo, njo...

Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o

O ponto não aceita qualquer coisa?Dentro da lista, todos os caracteres são normais, exceto o traço.

Page 13: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

RepresentanteLista: a exigente [...]

O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]

Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ...

“Os intervalos respeitama ordem numérica da tabela ASCII”

O traço colocamos no final da lista sozinho;

O colchete de abertura ( [ ) pode colocar em qualquer lugar;

O colchete de fechamento ( ] ) deve ser colocado no começo da lista;

Exemplo: [ ][ - ]

Como colocar o traço e os colchetes dentro da lista se eles são metacaracteres?

Page 14: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

RepresentanteLista: a exigente [...]

O traço, dentro da lista, é usado para definir intervalos: [0123456789] é igual a [0-9]

Estes intervalos podem ser usados para letras também: a-z, A-Z, 5-9, a-f, :-@, ...

“Os intervalos respeitama ordem numérica da tabela ASCII”

O traço colocamos no final da lista sozinho;

O colchete de abertura ( [ ) pode colocar em qualquer lugar;

O colchete de fechamento ( ] ) deve ser colocado no começo da lista;

Exemplo: [ ][ - ]

Como colocar o traço e os colchetes dentro da lista se eles são metacaracteres?

Peraí! Na tabela ASCII a-z não entram as palavras acentuadas, e agora?

Dá para resolver isto com alguns curingas, mas...

...Vamos conhecer as classes de caracteres POSIX

Page 15: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

RepresentanteLista: a exigente [...]

Os colchetes fazem parte da classe POSIX.

Uma classe dentro de uma lista ficaria assim:[[:upper:]]

IMPORTANTE: As classes POSIX levam em consideração a localidade.

Page 16: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Representante Lista negada : a experiente [^...]

“Nem tão exigente quanto a lista nem tão necessitada quanto o ponto, temos alista negada, que pelas suas más experiências passadas, sabe o que não servepara ela casar.”

A lista negada é igual a lista comum, a única diferença é que ela aceitará todos oscaracteres que NÃO tiverem dentro da lista. Ex: l[^aeioAEIO]a – lua, l1a, lpa...

IMPORTANTE: A lista negada não casa com espaço vazio. No exemplo acima elaNÃO aceitaria l a (l, espaço, a). É necessário ter um caractere diferente.

Deve ser colocado no final. Ex: [^:a-z123^]

Como colocar o ^ dentro da lista se eles são metacaracteres?

Page 17: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

QuantificadorOpcional: o opcional ?

“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.”

Já estamos aceitando algo abrangente deforma específica. Lembra do slide “Aplicações”?

Page 18: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

QuantificadorAsterisco: o tanto-faz *

“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.”

Um curinga na mangaVimos o metacaractere . (ponto) que aceita qualquer caractere. Agora vimos o metacaractere * (asterisco) que aceita em qualquer quantidade. Olhe e pense na seguinte expressão:

.*

Page 19: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

QuantificadorMais: o tem-que-ter +

“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, epode ter várias.”

Simples, não?!

Page 20: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

QuantificadorChaves: o controle {m,m}“Aqui Chaves não é o au?tor mexicano preferido de 10 entre 10brasileiros. As chaves são a solução para uma quantificação maiscontrolada, onde se pode especificar exatamente quantas repetiçõesse quer da entidade anterior.”

EX: a{1,2} – a, aa

b{0,2}a – a, ba, bba

Page 21: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

ÂncoraCircunflexo: o início ^

“O nosso amigo circunflexo (êta nome comprido e chato) marca o começo deuma linha. Nada mais.”

Dentro da lista (e no início) o ^ tem o objetivo de negar seu conteúdo. Fora dalista ele serve para marcar que a palavra deve ser encontrada exatamente noinício da linha. EX: ^[a-zA-Z].

Este metacaractere só é especial se tiver no começo da expressão regular. Se euquiser procurar uma palavra que começe com ^ poderia fazer assim:

^^

Está gostando? Faltam apenas mais dois âncoras para finalizar a parte teóricadesta apresentação.

Page 22: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

ÂncoraCifrão: o fim $

“Similar e complementar ao circunflexo, o cifrão marca o fim de uma linha e só é válido no final de uma ER.”

Que tal procurar por uma linha vazia? ^$

E uma linha que tenha entre 40 e 100 caracteres? ^.{20,60}$

As expressões estão ficando mais claro, não? Vamos finalizar o último metacaractere agora.

Page 23: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

ÂncoraBorda: a limítrofe \b

“A outra âncora que temos é a borda, que como o próprio nome já diz, marcauma borda, mais especificamente, uma borda de palavra.”

Basicamente ela marca onde começa e onde termina uma palavra. Simplesassim! Veja:

“Palavra” aqui engloba [A-Za-z0-9_], ou seja, letras, números e sublinhados. Poristo no exemplo acima \bdia\b aceitou bom-dia!, devido a exclamação e o traçonão fazerem parte de uma palavra. Em alguns aplicativos o _ também não faz. =)

Page 24: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Exemplos interativos

http://www.piazinho.com.br/#exemplos

Page 25: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

ExercíciosIremos fazer a seguir 4 exercícios simples de fixação. A resposta estará nopróximo slide. Tente resolve-los antes de prosseguir.

Escreva uma expressão regular que:

1. Reconheça a palavra carro minúscula, no plural, singular e em qualquer partede um texto.

2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula eem qualquer parte de um texto.

3. Reconheça um número de IP, que aceite 999.999.999.999Dica: O metacaracter “\” torna outro metacaractere literal.OBS: Sabemos que não existe um IP assim, foi usado aqui apenas para iniciar deforma simples o entendimento da aplicação de expressões regulares e osoperadores aprendidos nesta parte.

Page 26: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Respostas

1. Reconheça a palavra carro no plural e no singular.

“carros?”

2. Reconheça a palavra casa em qualquer combinação de maiúscula e minúscula.

“[cC][aA][sS][aA]”

3. Reconheça um número de IP.

“[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]”

Page 27: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Let´s code

Codificação simplificada em C#

using System.Text.RegularExpressions; (Biblioteca)

string content = “Conteúdo a ser lido"; Regex re = new Regex(“expressao_regular"); if (re.IsMatch(content))

// Encontrouelse

// Não encontrou

No site existe um exemplo para download codificando o trecho de código acima.

Page 28: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Debate e esclarecimentos

Page 29: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Definições para próximas partes

Parte 1 – Entendendo e aplicando expressões regulares em C#

Parte 2 – Estudando a biblioteca REGEX em C# e demais operadores básicos

Parte 3 – Conhecendo os operadores avançados e suas particularidades

Parte 4 – Mandamentos das expressões regulares, dicas e práticas em C#

Parte 5 – Coding Dojo criando uma aplicação com todos os recursos estudados

(Esta aplicação é para uma empresa de publicidade e propaganda)

Page 30: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Referências

Livro: Expressões regulares – Uma abordagem divertida

http://aurelio.net/

http://pt.wikipedia.org/wiki/Express%C3%A3o_regular

http://msdn.microsoft.com/en-us/library/ms228595(v=vs.80).aspx

Page 31: Bit2Bit - Expressões regulares - Parte 1

Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup

Entendendo e aplicando expressões regulares em C# - Parte 1

Lorival Smolski Chapuishttp://blog.lorival.com - [email protected] - @lorivalsc

Obrigado!