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
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
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.
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.”
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”;
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
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
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
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.
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
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
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.
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?
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
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.
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?
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”?
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:
.*
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?!
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
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.
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.
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. =)
Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup
Exemplos interativos
http://www.piazinho.com.br/#exemplos
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.
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]”
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.
Bit 2 Bit Study Grouphttp://blog.bit2bit.com.br – [email protected] - @bit2bitgroup
Debate e esclarecimentos
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)
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
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!