SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Entendendo e aplicando expressões regulares em C# - Parte 1 Conteúdo teórico embasado no livro: Expressões regulares – Uma abordagem divertida Aurélio Marinho Jargas – www.aurelio.net Lorival SmolskiChapuis http://blog.lorival.com- lorival@chapuis.com.br - @lorivalsc
Agenda Introdução Definição Origem Aplicações Metacaracteres Representantes Quantificadores Âncoras Exercícios Let´scode Debate e esclarecimentos Referências
Introdução 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? As expressões regulares, quando bem aplicadas e refinadas, permitem manipular textos de forma rápida e precisa. 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.  Isto faz com que poucos desenvolvedores dominem este poderoso assunto que bem aplicado economiza horas de desenvolvimento.
Introdução 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. A maioria do material sobre expressões regulares em português encontrado na internet é 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 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.”
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”;
Origem Surgiu em 1943 com um estudo que teorizava o funcionamento dos nossos neurônios Em 1968 foi para o computador em um algoritmo de busca para um editor chamado qed 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
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) 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.” 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: 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
Metacaracteres São símbolos com funções específicas utilizados para montar as expressões regulares. Existem vários tipos de metacaracteres, os básicos serão estudados nesta apresentaçã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
Representante Ponto: o necessitado . “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.” Lembre-se: o ponto aceita qualquer caractere.
RepresentanteLista: a exigente [...] “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.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo... Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o
RepresentanteLista: a exigente [...] “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.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar vá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
RepresentanteLista: a exigente [...] “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.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar vá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.
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?
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: [ ][ - ] 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 Como colocar o traço e os colchetes dentro da lista se eles são  metacaracteres?
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.
Representante Lista negada : a experiente [^...] “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.” 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...   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. Deve ser colocado no final. Ex: [^:a-z123^] Como colocar o ^ dentro da lista se eles são  metacaracteres?
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 de forma específica. Lembra do slide “Aplicações”?
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 manga 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: 	 .*
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, e pode ter várias.” Simples, não?!
QuantificadorChaves: o controle {m,m} “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.” EX: a{1,2} – a, aa       b{0,2}a – a, ba, bba
ÂncoraCircunflexo: o início ^ “O nosso amigo circunflexo (êta nome comprido e chato) marca o começo de uma linha. Nada mais.” 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]. 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: ^^ Está gostando? Faltam apenas mais dois âncoras para finalizar a parte teórica desta apresentação.
Â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.
ÂncoraBorda: a limítrofe  “A outra âncora que temos é a borda, que como o próprio nome já diz, marca uma borda, mais especificamente, uma borda de palavra.” Basicamente ela marca onde começa e onde termina uma palavra. Simples assim! Veja: “Palavra” aqui engloba [A-Za-z0-9_], ou seja, letras, números e sublinhados. Por isto no exemplo acima dia 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. =)
Exemplos interativos http://www.piazinho.com.br/#exemplos
Exercícios Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve-los antes de prosseguir. Escreva uma expressão regular que: 1. Reconheça a palavra carro minúscula, no plural, singulare em qualquer parte de um texto. 2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de um texto. 3. Reconheça um número de IP, que aceite 999.999.999.999 Dica: O metacaracter “ torna outro metacaractere literal. 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.
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]”
Let´scode 		Codificação simplificada em C# usingSystem.Text.RegularExpressions; (Biblioteca) stringcontent= “Conteúdo a ser lido";  Regexre= new Regex(“expressao_regular");  if(re.IsMatch(content))      // Encontrou else   // Não encontrou No site existe um exemplo para download codificando o trecho de código acima.
Debate e esclarecimentos
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 – CodingDojo criando uma aplicação com todos os recursos estudados (Esta aplicação é para uma empresa de publicidade e propaganda)
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
Entendendo e aplicando expressões regulares em C# - Parte 1 Obrigado! Lorival SmolskiChapuis http://blog.lorival.com- lorival@chapuis.com.br - @lorivalsc

Mais conteúdo relacionado

Destaque

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 

Destaque (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

Bit2Bit - Expressões regulares - Parte 1

  • 1. Entendendo e aplicando expressões regulares em C# - Parte 1 Conteúdo teórico embasado no livro: Expressões regulares – Uma abordagem divertida Aurélio Marinho Jargas – www.aurelio.net Lorival SmolskiChapuis http://blog.lorival.com- lorival@chapuis.com.br - @lorivalsc
  • 2. Agenda Introdução Definição Origem Aplicações Metacaracteres Representantes Quantificadores Âncoras Exercícios Let´scode Debate e esclarecimentos Referências
  • 3. Introdução 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? As expressões regulares, quando bem aplicadas e refinadas, permitem manipular textos de forma rápida e precisa. 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. Isto faz com que poucos desenvolvedores dominem este poderoso assunto que bem aplicado economiza horas de desenvolvimento.
  • 4. Introdução 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. A maioria do material sobre expressões regulares em português encontrado na internet é 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 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.”
  • 5. 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”;
  • 6. Origem Surgiu em 1943 com um estudo que teorizava o funcionamento dos nossos neurônios Em 1968 foi para o computador em um algoritmo de busca para um editor chamado qed 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
  • 7. 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) 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.” 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: 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
  • 8. Metacaracteres São símbolos com funções específicas utilizados para montar as expressões regulares. Existem vários tipos de metacaracteres, os básicos serão estudados nesta apresentaçã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
  • 9. Representante Ponto: o necessitado . “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.” Lembre-se: o ponto aceita qualquer caractere.
  • 10. RepresentanteLista: a exigente [...] “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.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar várias palavras como n o, n1o, noo, njo... Para deixá-la mais específica poderíamos usá-la assim: n[ãa]o
  • 11. RepresentanteLista: a exigente [...] “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.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar vá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
  • 12. RepresentanteLista: a exigente [...] “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.” No exemplo anterior, com a palavra não, a expressão n.o, poderia aceitar vá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.
  • 13. 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?
  • 14. 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: [ ][ - ] 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 Como colocar o traço e os colchetes dentro da lista se eles são metacaracteres?
  • 15. 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.
  • 16. Representante Lista negada : a experiente [^...] “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.” 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... 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. Deve ser colocado no final. Ex: [^:a-z123^] Como colocar o ^ dentro da lista se eles são metacaracteres?
  • 17. 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 de forma específica. Lembra do slide “Aplicações”?
  • 18. 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 manga 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: .*
  • 19. 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, e pode ter várias.” Simples, não?!
  • 20. QuantificadorChaves: o controle {m,m} “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.” EX: a{1,2} – a, aa b{0,2}a – a, ba, bba
  • 21. ÂncoraCircunflexo: o início ^ “O nosso amigo circunflexo (êta nome comprido e chato) marca o começo de uma linha. Nada mais.” 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]. 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: ^^ Está gostando? Faltam apenas mais dois âncoras para finalizar a parte teórica desta apresentação.
  • 22. Â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.
  • 23. ÂncoraBorda: a limítrofe “A outra âncora que temos é a borda, que como o próprio nome já diz, marca uma borda, mais especificamente, uma borda de palavra.” Basicamente ela marca onde começa e onde termina uma palavra. Simples assim! Veja: “Palavra” aqui engloba [A-Za-z0-9_], ou seja, letras, números e sublinhados. Por isto no exemplo acima dia 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. =)
  • 25. Exercícios Iremos fazer a seguir 4 exercícios simples de fixação. A resposta estará no próximo slide. Tente resolve-los antes de prosseguir. Escreva uma expressão regular que: 1. Reconheça a palavra carro minúscula, no plural, singulare em qualquer parte de um texto. 2. Reconheça a palavra casa em qualquer combinação de maiúscula, minúscula e em qualquer parte de um texto. 3. Reconheça um número de IP, que aceite 999.999.999.999 Dica: O metacaracter “ torna outro metacaractere literal. 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.
  • 26. 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]”
  • 27. Let´scode Codificação simplificada em C# usingSystem.Text.RegularExpressions; (Biblioteca) stringcontent= “Conteúdo a ser lido"; Regexre= new Regex(“expressao_regular"); if(re.IsMatch(content)) // Encontrou else // Não encontrou No site existe um exemplo para download codificando o trecho de código acima.
  • 29. 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 – CodingDojo criando uma aplicação com todos os recursos estudados (Esta aplicação é para uma empresa de publicidade e propaganda)
  • 30. 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
  • 31. Entendendo e aplicando expressões regulares em C# - Parte 1 Obrigado! Lorival SmolskiChapuis http://blog.lorival.com- lorival@chapuis.com.br - @lorivalsc