VB - Usando Expressões regulares


Você já falar em 'expressões regulares" ? Elas são muito úteis para realizar comparações padrões esperados e muito usadas em validações pois facilitam a vida do desenvolvedor.

Podemos considerar uma Expressão Regular: Um método formal de se especificar um padrão de texto. 
Ex: A expressão regular
[0-9]+   lhe permitirá localizar qualquer número inteiro num arquivo.

Obs: No exemplo, usamos colchetes para criar uma classe de caracteres [0-9]. Esta classe de caracteres coincidirá com qualquer caracter que for um dígito. O operador + significa que aquela classe de caracteres deverá ser satisfeita por (ao menos) um ou mais dígitos.

"Expressão regular é para palavras o que a matemática é para números."

Uma expressão regular define um padrão a ser usado para procurar ou substituir palavras ou grupos de palavras. É um meio preciso de se fazer buscas de determinadas porções de informação.

Nota : leia o artigo : Validação de formulário : CEP , Email e CPF - que trata do uso das expressões regulares no ASP.NET

A versão 5 do VBScript permitiu o acesso as expressões regulares. (Lembre-se que as expressões regulares são um conceito que não esta vinculado a nenhuma linguagem e pode ser usado pelo VB , C , Java , Perl , etc.)

Podemos usar as expressões regulares no VB ? Claro que sim , basta você fazer o download do pacote : Microsoft Windows Script 5.6 (Windows 2000, XP) e instalar se ainda não estiver instalado e incluir uma referência da biblioteca no seu projeto.

A utilização das expressões regulares no VB usa o objeto RegExp para efetuar verificações/validações de expressões contra um modelo padrão definido. O objeto fornece as seguintes propriedades que podem ser usadas para definir o padrão para comparar as strings que serão passadas com a instância do RegExp

O objeto RegExp também fornece os seguintes métodos para determinar se uma string coincide com um padrão particular da expressão:

Para fazer a comparação de uma string com uma expressão regular , siga os seguintes passos:

  1. Defina a expressão regular usando um método Pattern do objeto RegExp
  2. Obtenha a string para examinar com o modelo padrão
  3. Defina a propriedade IgnoreCase do objeto para True
  4. Passe a string que você obteve no passo 2 como um argumento para o método Execute do objeto
  5. Atribua o valor retornado do método Execute para o objeto MatchCollection

Vamos então a um exemplo para que tudo fique mais claro:

Vamos criar uma função que irá ser chamada para testar a expressão regular. Abaixo o código da mesma:

Function TestaRegExp(padrao As String, texto As String)
Dim objRegExp As RegExp
Dim objMatch As Match
Dim colMatch As MatchCollection
Dim valor As String
'cria um objeto expressão regular
Set objRegExp = New RegExp
'define o padrão - Pattern
objRegExp.Pattern = padrao
'define IgnoreCase
objRegExp.IgnoreCase = True
'define a propriedade global
objRegExp.Global = True
'verifica se a string pode ser comparada
If (objRegExp.Test(texto) = True) Then
   'obtem as coincidencias
   Set colMatch = objRegExp.Execute(texto)   'executa a busca
   
   For Each objMatch In colMatch
      valor = valor & " padrao encontrado na posição "
      valor = valor & objMatch.FirstIndex & ". o valor é '"
      valor = valor & objMatch.Value & " '." & vbCrLf
   Next
Else
     valor = "Comparação falhou !"
End If
   TestaRegExp = valor      
End Function

Para chamar a função insira o código abaixo no evento Click do botão de comando:

Private Sub Command1_Click()
 Text3.Text = TestaRegExp(Text1.Text, Text2.Text)
End Sub

Estamos comparando o padrão is com o texto IS1 is2 IS3 is4 e exibindo o valor obtido no retorno da função na caixa de texto - Text3.text.

O resultado obtido é :

Vamos a algo mais prático.  O código abaixo irá procura por todas as palavras em uma string:

' procura por todas as palavras em uma string
Dim re As New RegExp
Dim m As Match
Dim t As String
texto = "Introdução a expressões regulares no VB "
re.Pattern = "\w+"
re.Global = True
For Each m In re.Execute(texto)
   MsgBox m.Value
Next

Abaixo temos uma pequena (muito pequena) lista de tipos padrão usadas com as expressões regulares:

x* Zero ou mais x's
x+ Um ou mais x's
x? Um ou zero x's
[A-Z] Qualquer caractere maiúsculo de A-Z
. Qualquer caractere excepto newline
\w Qualquer caractere alfanumérico
\d Qualquer digito (o mesmo que [0-9])
^a tudo que começa com a
s$ tudo que termina com s

Isto é apenas o inicio , aguarde mais artigos sobre expressões regulares ...

referências:


José Carlos Macoratti