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 GomesA 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 %>