我有麻煩使用正則表達式來測試一個字符串是否可以接受,如果不顯示消息。我檢查了教程,並找到了這一個,但它總是返回true,無論字符串是否匹配。爲什麼test.regex總是返回true?
Function TestRegEx(regex As Object, testpattern As String, stringtotest As String) As Boolean
Dim regMatch As Object ' MatchCollection
With regex
.Pattern = testpattern
.MultiLine = False
End With
' match test string against regex string
Set regMatch = regex.Execute(stringtotest)
TestRegEx = (regMatch.Count > 0)
End Function
Sub TestRegex()
Dim regex As Object ' RegExp
Dim pattern As String
Dim inputstring As String
Set regex = GetRegEx
If Not regex Is Nothing Then
testpattern = "[0-9]{1,3}" ' 1 to 3 numbers
stringtotest = "12"
MsgBox TestRegEx(regex, pattern, inputstring)
End If
End Sub
如果我寫入其他東西到:stringtotest,就像:baloon,dog,3333它總是返回True。
testpattern = "^[0-9]{5}$"
stringtotest = "KB"
也返回:真
我嘗試添加
If TestRegEx(regex, pattern, inputstring) = True Then
msgbox "OK"
Else
msgbox "NotOK"
End IF
但它不工作,我總是得到確定。 代碼有什麼問題? 如何解決它?
同樣的事情發生在我自己的代碼中。
在我的情況下,我需要檢查,如果在Outlook中郵件的主題包含特定的字符串。我使用稍微不同的代碼,然後是教程,但它永遠不會變成False。
regex.pattern = "Cid#\d{4}"
If regex.Test(msg.Subject) = True Then
...
Else
...
編輯
Function GetRegEx() As Object
On Error Resume Next
Set GetRegEx = CreateObject("VBScript.RegExp")
End Function
我忘了這一點,不好意思。
而且我發現這個教程對jpsoftware
EDIT2:我的代碼
Dim objInsp As Outlook.Inspector
Dim msg As Outlook.MailItem
Dim regex As New RegExp
Dim prevsubj As String
Set objInsp = Application.ActiveInspector
Set msg = objInsp.CurrentItem
prevsubj = msg.Subject
subjlen = Len(prevsubj)
regex.IgnoreCase = False
regex.pattern = "Cid#\d{4}"
Set regex = GetRegEx
If regex.Test(msg.Subject) = True Then
MsgBox regex.Test(msg.Subject)
newtempsubj = Left(prevsubj, subjlen - 8)
msg.Subject = newtempsubj & " Cid#" & 'newidstring
msg.Close olSave
Else
MsgBox prevsubj
msg.Subject = prevsubj & " Cid#" & 'newidstring
msg.Close olSave
End If
由於提前, ž
你的代碼沒有意義。 'regex.Test'不存在,你正在檢查'Sub'的返回值。 –
'GetRegEx'這是什麼 – sam092
我說我的代碼是不同的,並且在我的代碼中存在'regex.Test'。第一部分是完整的教程,我想從中理解這些功能。 – ZZA