 A plataforma .NET e as  
Expressões Regulares
 
 
A plataforma .NET e as  
Expressões Regulares
|  | A Microsoft .NET Framework vem com um poderoso mecanismo de expressões regulares que é acessível a qualquer linguagem da plataforma: VB.NET, C#, etc. | 
Uma expressão regular ou regex para simplificar, é um modelo que descreve uma certa quantidade de texto. A expressão regular mais simples consiste de um único caractere. Ex: a. Este padrão irá coincidir com a primeira ocorrência do caractere em uma string. Se a string for "Isto é apenas um teste" a primeira ocorrência será a letra a antes da letra p (de apenas).
As expressões regulares possuem 11 caracteres especiais conhecidos como meta caracteres, são eles:
Para usar qualquer um destes caracteres como um literal em uma expressão regular temos que usar um caractere de escape (\). Assim se você deseja escrever 1+1=2 deverá usar 1 \+ 1=2 de outra forma o caractere + terá um significado especial.
Regex é a classe mais importante deste grupo e qualquer código para um expressão regular instancia pelo menos um objeto desta classe ( ou usar um dos métodos estáticos da classe Regex). Você instancia este objeto passando o padrão de critério escrito no formato especial da linguagem usada para expressão regulares. No exemplo a seguir a expressão regular define qualquer grupo de dois caracteres consistindo de uma vogal seguida por um dígito:
Dim re As New Regex("[aeiou\d")
O método de localização do objeto Regex aplica a expressão regular a string passada como argumento; e retorna um objeto do tipo MatchCollection, uma coleção somente-leitura que representa todas as ocorrências coincidentes com o critério usado.
No exemplo abaixo estamos aplicando a expressão regular definida acima a um texto e obtendo o número de coincidências obtidas:
Para testar o código abaixo crie um novo projeto do tipo Windows forms e inclua no formulário padrão uma caixa de texto. Lembrando que para ter acesso a classe Regex devemos usar o namespace : System.Text.RegularExpressions
| Imports System.Text.RegularExpressions Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim re As New Regex("[aeiou]\d") ' Esta string contém 3 gupors que coincidem com a expressão regular definida Dim text As String = "a1 = a1 & e2" ' Obtém a coleção de coincidências Dim mc As MatchCollection = re.Matches(text) ' Obtendo o número de ocorrências encontradas txtRegex.Text = mc.Count End Sub End Class | 
Você também pode passar um segundo argumento ao método Matches o qual será interpretado com um índice onde a procura inicia.
O objeto MathCollection contém objetos Match individuais os quais expõe propriedades como Value (indicando a string que foi encontrada) , index ( indicando a posição da string no texto) e Length ( o comprimento da string coincidente) .
No exemplo abaixo expandimos o exemplo dado anteriormente para exibir além da quantidade de ocorrências o valor da string coincidente e a posição inicial de localização no texto:
| Imports System.Text.RegularExpressions Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim re As New Regex("[aeiou]\d") ' Esta string contém 3 gupors que coincidem com a expressão regular definida Dim text As String = "a1 = a1 & e2" ' Obtém a coleção de coincidências Dim mc As MatchCollection = re.Matches(text) ' Obtendo o número de ocorrências encontradas txtRegex.Text = "Quantidade de ocorrências = " & mc.Count & vbCrLf For Each m As Match In mc ' Exige o texto e posição txtRegex.Text += "Texto = " & m.Value & " na posicao = " & m.Index & vbCrLf Next End Sub End Class | |
|  | 
O objeto Regex também é capaz de modificar a string fonte pela busca de uma dada expressão regular e substituindo-a por um outro valor através da utilização do método Replace:
| Private Sub Button1_Click(ByVal sender As
        System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim texto As String = "a1 = a1 & e2" txtRegex.Text = "Texto inicial => " & texto & vbCrLf ' busca pelo caractere "a" seguido por um digito Dim re2 As New Regex("a\d") ' elimina o digito que segue o caractere "a" Dim res As String = re2.Replace(texto, "a") txtRegex.Text += "Texto alterado => " & res End Sub | |
|  | 
A classe Regex também expõe versões estáticas dos métodos : Match, Matches e Replace. Você pode usar os métodos estáticos quando você não instanciar um objeto Regex explicitamente:
O código a seguir é equivalente ao usando anteriormente mas não instância um objeto Regex. res = Regex.Replace(texto, "a\d", "a")
Podemos usar as expressões regulares para efetuar validações em diversos níveis, até em instruções SQL para evitar o ataque de injeção SQL. Abaixo um exemplo básico para as principais instruções SQL:
| Instrução | Expressão Regular de Validação da consulta SQL | 
| Select | SELECT\s[\w\*\)\(\,\s]+\sFROM\s[\w]+ | 
| Update | UPDATE\s[\w]+\sSET\s[\w\,\'\=]+ | 
| Insert | INSERT\sINTO\s[\d\w]+[\s\w\d\)\(\,]*\sVALUES\s\([\d\w\'\,\)]+ | 
| Delete | DELETE\sFROM\s[\d\w\'\=]+ | 
Nota: Para saber mais sobre injeção SQL leia o artigo : Previna-se contra a injeção SQL.
A seguir é apresentada uma tabela contendo alguns caracteres e expressões usadas na linguagem das expressões regulares:
| Sequencia | Descrição | 
|---|---|
| \a | Caractere de alarme (\x07). | 
| \b | O backspace ou retrocesso(\x08) | 
| \t | O caractere tab (\x09). | 
| \r | O carriage return ou retorno( \x0D). | 
| \v | O tab vertical (\x0B). | 
| \f | O form-feed ou alimentador de formulario(\x0C). | 
| \n | O caractere nova linha (\x0A). | 
| \e | O caractere scape ( \x1B). | 
| \040 | Um caractere ASCII expresso na notação octal | 
| \x20 | Um caractere ASCII expresso na notação hexadecimal | 
| \cC | Um caractere de controle ASCII . Exemplo: \cC =>control+C. | 
| \u0020 | Um caractere Unicode na notação hexadecimal: Ex:: \u0020 é um espaço. | 
| \* | Quando uma barra invertida for seguida por um caractere que não é de escape ele é o caractere de critério usado na expressão. Ex:: \* usa como critério o caractere * | 
| . | O caractere ponto coincide com qualquer caractere exceto com o o caractere de nova linha. | 
| [aeiou] | Qualquer caractere na lista entre os parênteses ([]) que coincidirem com qualquer uma das vogais. | 
| [^aeiou] | Qualquer caractere exceto aqueles definidos entre os parênteses ([]), ou seja, exceto as vogais. | 
| [azAZ] | O traço permite a você definir intervalo de caracteres: [azAZ] coincide com qualquer caractere minúsculo ou maiúsculo entre a e z.; [^09] coincide qualquer caractere não digito. | 
| \w | Um caractere alfanumérico ou um caractere de sublinhado; o mesmo que [a-zA-Z_0-9] mas inclui também caracteres acentuados e outros símbolos alfabéticos. | 
| \s | Um caractere de espaço em branco,o qual pode ser um space, um tab, um form-feed, um newline, um carriage ; o mesmo que [ \f\n\r\t\v]. | 
| \S | Um caractere diferente de um espaço em branco; o mesmo que [^ \f\n\r\t\v]. | 
| \d | Um digito decimal; o mesmo que [0-9]. | 
| \D | Um caractere não numérico; o mesmo que [^0-9]. | 
| ^ | O inicio da string. | 
| $ | O final de uma string | 
| \A | O inicio de uma string | 
| \Z | O final de uma string ou a posição antes do caractere de nova linha no final da string. | 
| \z | Exatamente o fim da string | 
| \G | A posição na qual a busca atual inicia. | 
| * | Nenhuma ou mais coincidências. | 
| + | Uma ou mais coincidências. | 
| ? | Zero ou uma coincidência; | 
| {N} | Exatamente N coincidências; | 
| {N,} | No mínimo N coincidências; | 
| {N,M} | Entre N e M coincidências; | 
| $_ | Substitui a toda a string fonte. | 
Aguarde em breve mais artigos sobre Expressões Regulares na plataforma .NET.
 Até o próximo artigo...
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
.NET - Ferramentas de Produtividade : Expresso - Tratando expressões regulares