实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!
实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!
发布时间:2016-12-29 来源:查字典编辑
摘要:CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式:词语搜索[例如:小明]词组搜索词组里面每一个词都将被检索例如:小...

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新ASP教程学习
热门ASP教程学习
编程开发子分类