繁体中文
设为首页
加入收藏
当前位置:ASP技术首页 >> ASP基础 >> 实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS

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

2006-04-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式: 词语搜索 [例如: 小明] 词组搜索 词组里面每一个词都将被检索 例如: 小强1 小名1 小强强 小小强 逻辑搜索 支持 And 和 Or 运算符. 例如: 小明 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

责任编辑:admin
相关文章