CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式:
词语搜索[例如:小明]
词组搜索
词组里面每一个词都将被检索
例如:小强1小名1小强强小小强
逻辑搜索
支持And和Or运算符.
例如:小明And小强And小小强
复合条件:
例如:(小小明Or小明)And(小强Or小小强)
例如:(小小明Or小名)And小小强
例如:ROOT1And(广东人Or北京人)
-----------------------------------------------------------
复制代码 代码如下:
ClassCreateQueryString
PublicobjReg
PublicintStart
PublicstrField
PrivateobjNode2
PrivatestrText
PublicPropertyLetQueryString(strValue)
strText=Lcase(strValue)
EndProperty
PrivateSubClass_Initialize()
SetobjReg=newRegExp
strField="(标题+文章)"
EndSub
PrivateSubClass_Terminate()
SetobjReg=Nothing
EndSub
PublicDefaultFunctionGetText()
DimblnRes
DimstrSky
WithobjReg
.IgnoreCase=true
.Global=True
.Pattern="s"
blnRes=.Test(strText)
EndWith
If(NotblnRes)Then
intStart=2
GetText=strField&"like'%"&strText&"%'"
Else
objReg.Pattern="sand|sor"
blnRes=objReg.Test(strText)
IfblnResThen
strSky=check()
IfstrSky=FalseThen
GetText=wahaha()
Else
GetText=strSky
Endif
Else
GetText=wahaha()
Endif
EndIf
EndFunction
PrivateFunctionwahaha()
DimstrTer
DimstrLikes
DimstrOrs
DimstrI
DimobjRe
strTer=""
strLikes="or("&strField&"like'%"
strOrs="%')"
objReg.Pattern="(S*S)"
SetobjRe=objReg.Execute(strText)
ForEachstrIInobjRe
strTer=strTer&strLikes&strI&strOrs
Next
wahaha=Mid(strTer,4)
intStart=3
EndFunction
PrivateFunctionCheckYes(strMode,intCount)
DimobjNode1
objReg.Pattern=strMode
SetobjNode1=objReg.Execute(strText)
IfobjNode1.Count<1Then
CheckYes=True
Else
SetobjNode2=objNode1(0)
IfobjNode2.subMatches.Count<intCountThen
CheckYes=True
EndIf
EndIf
EndFunction
PrivateFunctionORAND()
DimstrSSS
DimstrCCC
DimstrAAA
Dima143
Dimi
DimobjN
DimblnTru
DimblnBBB
strSSS="("&strField&"like'%"
strCCC="%')"
strAAA=""
n1=0
blnTru=True
blnBBB=True
objReg.Pattern="(S*S)"
SetobjN=objReg.Execute(strText)
a143=objN.Count-1
If(objN.Item(a143)="and")Or(objN.Item(a143)="or")Then
ORAND=False
ExitFunction
Endif
ForEachiInobjN
IfblnTruThen
If(i<>"and")And(i<>"or")Then
blnTru=False
strAAA=strAAA&strSSS&i&strCCC
Else
blnBBB=false
Exitfor
Endif
Else
If(i="and")Or(i="or")Then
blnTru=True
strAAA=strAAA&i
Else
blnBBB=False
ExitFor
Endif
Endif
Next
If(NotblnBBB)Then
ORAND=False
Else
ORAND=strAAA
intStart=4
Endif
EndFunction
PrivateFunctioncheck()
Dimre
Dimre1
Dimre2
Dimre3
Dimstr
Dimstr1
Dima1
Dima2
Dima3
Dima4
str=strField&"like'%"
str1="%'"
WithobjReg
.Pattern="^(.+)s(and|or)s"
re=.Test(strText)
.Pattern="s(and|or)s(.+)$"
re3=.Test(strText)
EndWith
IfreAndre3Then
IfCheckYes("^((S*S)(borb|bandb)(S*S))(and|or)((S*S)(borb|bandb)(S*S))$",6)Then
check=False
Else
WithobjNode2
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
EndWith
EndIf
ElseIfreThen
IfCheckYes("^((S*S)(borb|bandb)(S*S))(and|or)(.+)",4)Then
check=False
Else
WithobjNode2
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
EndWith
EndIf
ElseIfre3Then
IfCheckYes("(.+)(and|or)((S*S)(borb|bandb)(S*S))$",4)Then
check=False
Else
WithobjNode2
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
EndWith
EndIf
Else
check=ORAND()
EndIf
EndFunction
EndClass
-------------------------注意-----------------------------
替换好的字符串并不是完整的SQL语句.只是生成SQL语句的WHERE关键字后面的表达式.发送到ASP程序的时候.你可以在前面加上
"selectid,标题,name,TableNamefromSearchAllwhere"
这样类似的SQL语句
-------------------------VBScript例子-----------------------------
DimobjROOT1
SetobjROOT1=newCreateQueryString
objROOT1.QueryString=strText'====传入要替换的字符串
objROOT1.strField="要查询的字段名字"'===如果不设置.默认值是"(标题+文章)"
strText=objROOT1()'=========得到替换好的SQL语句
If(objQueryString.intStart=4)Then
CallMsgbox("启动按逻辑搜索")
EndIf
SetobjROOT1=Nothing