復合條件: 例如:(小小明 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