当前位置: 首页 > 图文教程 > 网络编程 > ASP > 实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!

ASP
ASP正则表达式技巧
ASP Access实现网站计数器(访问量)
ASP新闻分页,将一篇过长的文章分页,生成静态页面
一些关于asp 购物车的想法
一个sql查询器,自动画表格填字段
ASP实现文件直接下载的代码
把网页中的(电话,qq等数字)生成图片的ASP程序
asp长文章用分页符来分页显示
Asp函数介紹(37个常用函数)
ASP中的面向对象类
分页实现方法的性能比较
asp ajax跨域提交数据
asp修改文件和文件夹的名字的代码
ASP 多关键词查询实例代码
asp被杀毒软件误删的解决方法
asp 多关键词搜索的简单实现方法
asp 根据IP地址自动判断转向分站的代码
asp dictionary对象的用法
ASP 千万级数据分页的存储过程
ASP隐藏真实文件的下载功能实现代码

ASP 中的 实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 51 ::
收藏到网摘: n/a

CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式:
词语搜索 [例如: 小明]
词组搜索
词组里面每一个词都将被检索
例如: 小强1 小名1 小强强 小小强
逻辑搜索
支持 And 和 Or 运算符.
例如: 小明 And 小强 And 小小强
复合条件:
例如:(小小明 Or 小明) And (小强 Or 小小强)
例如:(小小明 Or 小名) And 小小强
例如: ROOT1 And (广东人 Or 北京人)
-----------------------------------------------------------
复制代码 代码如下:

Class CreateQueryString
Public objReg
Public intStart
Public strField
Private objNode2
Private strText
Public Property Let QueryString( strValue )
strText = Lcase( strValue )
End Property
Private Sub Class_Initialize()
Set objReg = new RegExp
strField = "(标题+文章)"
End Sub
Private Sub Class_Terminate()
Set objReg = Nothing
End Sub
Public Default Function GetText()
Dim blnRes
Dim strSky
With objReg
.IgnoreCase = true
.Global = True
.Pattern = "\s"
blnRes = .Test( strText )
End With
If (Not blnRes) Then
intStart = 2
GetText = strField & " like '%" & strText & "%'"
Else
objReg.Pattern = "\sand|\sor"
blnRes = objReg.Test( strText )
If blnRes Then
strSky = check()
If strSky = False Then
GetText = wahaha()
Else
GetText = strSky
End if
Else
GetText = wahaha()
End if
End If
End Function
Private Function wahaha()
Dim strTer
Dim strLikes
Dim strOrs
Dim strI
Dim objRe
strTer = ""
strLikes = " or (" & strField & " like '%"
strOrs = "%')"
objReg.Pattern = "(\S*\S)"
Set objRe = objReg.Execute(strText)
For Each strI In objRe
strTer = strTer & strLikes & strI & strOrs
Next
wahaha = Mid( strTer , 4 )
intStart = 3
End Function
Private Function CheckYes( strMode , intCount)
Dim objNode1
objReg.Pattern = strMode
Set objNode1 = objReg.Execute( strText )
If objNode1.Count < 1 Then
CheckYes = True
Else
Set objNode2 = objNode1( 0 )
If objNode2.subMatches.Count < intCount Then
CheckYes = True
End If
End If
End Function
Private Function ORAND()
Dim strSSS
Dim strCCC
Dim strAAA
Dim a143
Dim i
Dim objN
Dim blnTru
Dim blnBBB
strSSS = "(" & strField & " like '%"
strCCC = "%')"
strAAA = ""
n1 = 0
blnTru = True
blnBBB = True
objReg.Pattern = "(\S*\S)"
Set objN = objReg.Execute( strText )
a143 = objN.Count - 1
If (objN.Item( a143 ) = "and") Or (objN.Item( a143 ) = "or") Then
ORAND = False
Exit Function
End if
For Each i In objN
If blnTru Then
If (i <> "and") And (i <> "or") Then
blnTru = False
strAAA = strAAA & strSSS & i & strCCC
Else
blnBBB = false
Exit for
End if
Else
If (i = "and") Or (i = "or") Then
blnTru = True
strAAA = strAAA & i
Else
blnBBB = False
Exit For
End if
End if
Next
If (Not blnBBB) Then
ORAND = False
Else
ORAND = strAAA
intStart = 4
End if
End Function

Private Function check()
Dim re
Dim re1
Dim re2
Dim re3
Dim str
Dim str1
Dim a1
Dim a2
Dim a3
Dim a4
str = strField & " like '%"
str1 = "%'"
With objReg
.Pattern = "^\(.+\)\s(and|or)\s"
re = .Test( strText )
.Pattern = "\s(and|or)\s\(.+\)$"
re3 = .Test( strText )
End With
If re And re3 Then
If CheckYes( "^\((\S*\S) (\bor\b|\band\b) (\S*\S)\) (and|or) \((\S*\S) (\bor\b|\band\b) (\S*\S)\)$" , 6 ) Then
check = False
Else
With objNode2
a1 = .submatches(0)
a2 = .submatches(2)
a3 = .submatches(4)
a4 = .submatches(6)
check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_
.submatches(3) & " (" & str & a3 & str1 & " " & .submatches(5) & " " & str & a4 & str1 & ")"
intStart = 5
End With
End If
ElseIf re Then
If CheckYes( "^\((\S*\S) (\bor\b|\band\b) (\S*\S)\) (and|or) (.+)" , 4 ) Then
check = False
Else
With objNode2
a1 = .submatches(0)
a2 = .submatches(2)
a3 = .submatches(4)
check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_
.submatches(3) & " (" & str & a3 & str1 & ")"
intStart = 5
End With
End If
ElseIf re3 Then
If CheckYes( "(.+) (and|or) \((\S*\S) (\bor\b|\band\b) (\S*\S)\)$" , 4 ) Then
check = False
Else
With objNode2
a1 = .submatches(0)
a2 = .submatches(2)
a3 = .submatches(4)
check = "(" & str & a1 & str1 & ") " & .submatches(1) & " (" & str & a2 & str1 & " " &_
.submatches(3) & " " & str & a3 & str1 & ")"
intStart = 5
End With
End If
Else
check = ORAND()
End If
End Function
End Class

-------------------------注意-----------------------------
替换好的字符串并不是完整的SQL语句.只是生成SQL语句的WHERE关键字后面的表达式.发送到ASP程序的时候.你可以在前面加上
"select id,标题,name,TableName from SearchAll where "
这样类似的SQL语句
-------------------------VBScript例子-----------------------------
Dim objROOT1
Set objROOT1 = new CreateQueryString
objROOT1.QueryString = strText '====传入要替换的字符串
objROOT1.strField = "要查询的字段名字" '===如果不设置.默认值是"(标题+文章)"
strText = objROOT1() '=========得到替换好的SQL语句
If (objQueryString.intStart = 4) Then
Call Msgbox("启动按逻辑搜索")
End If
Set objROOT1 = Nothing