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