Desenvolvimento - ASP

Pesquisa usando expressões regulares

O objetivo deste artigo é esclarecer como realizar uma pesquisa de expressão regular usando um banco de dados.

por Jaime da Silva Gomes



Comentário:

A versão 5 da VBscript herdou os poderosos recursos de correspondência de expressão regular. Dissemos herdou, pois, aparentemente, o código para realizar pesquisas de expressões regulares foi portado mais ou menos diretamente das pesquisas de expressões regulares JScript, sem se preocupar com nada remotamente, como o VB. Essa transferência serve para manter as duas linguagens de script aproximadamente em sincronismo, mas ao custo (para os programadores de VBscript) do tratamento de índices de strings baseados em zero, o que é totalmente oposto ao espírito geral e à prática normal de VBscript e VB. Além disso, os caracteres de correspondências de padrão (e a documentação) foram criados para programadores de Java/JavaScript/C e não para programadores de VBscript/VB. A despeito dessas dificuldades, as pesquisas de expressões regulares são extremamente poderosas e podem muito mais do que a simples função instr().

Obs: Lembre-se de que expressões regulares são sensíveis a letras maiúsculas e minúsculas.

Objetivo:

Meu objetivo é esclarecer como realizar uma pesquisa de expressão regular usando um banco de dados.

Funcionamento:

Vamos analisar como funciona todo o processo dessa pesquisa.

1º) Iremos armazenar o valor da pesquisa na variável strBusca.

StrBusca = Request.Querystring("busca")

2º) Usaremos ela na instrução SQL para pesquisar uma palavra qualquer.

strPesquisa = "SELECT descricao FROM expressoes WHERE descricao LIKE "%" & strBusca & "%""

2º) Após a instrução SQL ser executada, iremos armazena o que está em strPesquisa na variável Obj do objeto connection.

Set Obj = conn.execute(strPesquisa)

3º) Na execução do Loop criaremos a expressão regular.

     While not Obj.EOF 
     strpexr = Obj.Fields("descricao").value - Aqui atribuimos o objeto Obj.Fields("descricao").value 
à variável pexr.
     Set rgxp = New RegExp - Cria um novo objeto RegExp "expressão regular".
     rgxp.Pattern = strbusca - Pesquisa a palavra digitada na variável pexr.
     mudar = strpexr -  Atribui o valor da variável pexr na variável mudar.
     mudar =  Replace(mudar,(strbusca), "<b>" & (strbusca) & "</b>") - Aqui está o resume 
dessa pesquisa. Simplismente a função Replace substiuirá o valor mudar(strbusca) por "<b>" & 
(strbusca) & "</b>", ou seja, ela colocará em negrito o valor digitado pelo usuário no campo 
texto, deixando todas as palavras correspondentes em negrito. O que estou mostrando aqui, vocês estão 
acostumados a vê quase todos os dias, ao realizar uma busca quer seja no Google ou em qualuer outro 
site de busca que usa expressões regulares. É só você prestar atenção que a palavra a ser pesquisada 
aparecerá na pesquisa em negrito.

4º) Agora o valor do objeto connection está na variável mudar. Então será realizado o Loop que encontrará o valor da pesquisa sem erros.

<%=mudar & "<br>"%>

5º) Finalizar o loop.

   <% Obj.movenext
      Wend%>	

Código completo:

Arquivo expressoes.asp

<html>
<head>
</head>
<body>
<big><center><b>Pesquisa usando Expressões 
Regulares</b></center></big>
<br>
<center>Linguagem: <font 
color="red"><b>Vbscript</b></font></center>
<br><br><br>

            <form action="<%=strCaminho%>" method="get">
              <div align="center"> 
                <input name="busca" value="<%=strBusca%>">
                <input name="submit" type="submit" value="Buscar" >
              </div>
            </form>

<%
Dim strconexao, conn, Obj, strPesquisa,  strBusca,  strCaminho, descricao, pexr, mudar

strBusca = Trim(Request.QueryString("busca")) "Retira espaços e Armazena o valor digitado pelo usuário 
na variável strBusca.
strCaminho = Request.ServerVariables("URL") "Armazena o caminho da URL na variável strCaminho.

If strBusca <> "" Then

"Cria conexão com BD usando ADO.
strConexao = "Provider=Microsoft.Jet.OLEDB.4.0; data source=" & Server.MapPath("banco.mdb")
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open strConexao

"Realiza pesquisa usando instrução SQL.
strPesquisa = "SELECT descricao FROM expressoes WHERE descricao LIKE "%" & strBusca & "%""
Set Obj = conn.execute(strPesquisa)

%>

<%
"Incia o Loop e cria o objeto de expressão regular.
while not Obj.EOF
pexr = Obj.Fields("descricao").value
Set rgxp = New RegExp
rgxp.Pattern = strbusca
mudar = pexr
mudar =  Replace(mudar,(strbusca), "<b>" & (strbusca) & "</b>")
%> 
<%=mudar & "<br>"%>
<%Obj.Movenext
wend
End if
%>
</body>
</html>

<%

set obj = nothing
set conn = nothing
%>
Jaime da Silva Gomes

Jaime da Silva Gomes