广

ASP编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-05-16 07:53:43 次阅读 稿源:互联网
    零七广告
    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

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告