源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 440|回复: 27

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

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2006-8-25 00:00:00 | 显示全部楼层 |阅读模式
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
回复

使用道具 举报

4

主题

2万

回帖

58

积分

注册会员

Rank: 2

积分
58
发表于 2022-8-23 01:24:04 | 显示全部楼层
撒旦撒旦撒擦擦擦擦
回复 支持 反对

使用道具 举报

1

主题

2万

回帖

362

积分

中级会员

Rank: 3Rank: 3

积分
362
发表于 2022-8-27 03:10:53 | 显示全部楼层
女生看了弄丢了卡萨诺的卡洛斯
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-9-15 13:17:26 | 显示全部楼层
强烈支持楼主ing……
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

99

积分

注册会员

Rank: 2

积分
99
发表于 2022-10-13 23:59:11 | 显示全部楼层
撒房产税陈飞飞
回复 支持 反对

使用道具 举报

1

主题

1万

回帖

93

积分

注册会员

Rank: 2

积分
93
发表于 2022-10-28 03:58:58 | 显示全部楼层
我找了挺久终于找到了
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-12-15 23:35:49 | 显示全部楼层
额UI废物iuhfujewfiewnnfen
回复 支持 反对

使用道具 举报

0

主题

8878

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2022-12-18 00:19:50 | 显示全部楼层
天天源码社区www.tiantianym.com
回复 支持 反对

使用道具 举报

3

主题

2万

回帖

50

积分

注册会员

Rank: 2

积分
50
发表于 2023-1-6 18:28:21 | 显示全部楼层
额头额定法国队是范德萨
回复 支持 反对

使用道具 举报

0

主题

2万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-4-26 18:10:12 | 显示全部楼层
给爸爸爸爸爸爸爸爸爸爸八佰伴八佰伴
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-24 13:20 , Processed in 0.085491 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表