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

II0Y1K

II0Y1K

2016-02-19 09:39

下面是个实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!教程,撑握了其技术要点,学起来就简单多了。赶紧跟着图老师小编一起来看看吧!
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) (borb|bandb) (S*S)) (and|or) ((S*S) (borb|bandb) (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) (borb|bandb) (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) (borb|bandb) (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
展开更多 50%)
分享

猜你喜欢

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

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

钉钉搜索框支持关键字搜索吗?

电脑网络
钉钉搜索框支持关键字搜索吗?

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

jQuery实现搜索关键字自动匹配提示方法

Web开发
jQuery实现搜索关键字自动匹配提示方法

Windows系统关键字搜索也有漏网之鱼

windows 操作系统
Windows系统关键字搜索也有漏网之鱼

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

AJAX 支持搜索引擎问题分析

Web开发
AJAX 支持搜索引擎问题分析

jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大

Web开发
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

从汇编看c++函数的默认参数的使用说明

从汇编看c++函数的默认参数的使用说明

MacBook Pro 为什么没有硬盘灯?

MacBook Pro 为什么没有硬盘灯?
下拉加载更多内容 ↓