引用了Microsoft VBScript Regular Expressions 5.5 後就可以宣告正則相關物件了。主要有三個物件:RegExp、MatchCollection、Match。
1. RegExp 這是VB使用正則表示式匹配模式的主要物件了。其提供的屬性用於設定那些用來比較的傳遞給 RegExp 例項的字串的模式。 其提供的方法以確定字串是否與正則表示式的特定模式相匹配。
屬性:
Pattern:一個字串,用來定義正則表示式。
IgnoreCase:,則忽略英文字母大小的匹配,False對大小寫進行匹配。
Global:設定一個布林值或返回一個布林值,該布林值指示一個模式是必須匹配整個搜尋字串中的所有搜尋項還是隻匹配第一個搜尋項。
MultiLine:這個MS沒有介紹。查了一下資料,設定一個布林值或返回一個布林值,是否在串的多行中搜索。如果允許匹配多行文字,則multiline為true,如果搜尋必須在換行時停止,則為false 。
方法:
Execute:返回一個 MatchCollection 物件,該物件包含每個成功匹配的 Match 物件。
Replace:MS沒有介紹,這是返回一個將匹配字元替換為指定字元的字串。
Test:返回一個布林值,該值指示正則表示式是否與字串成功匹配。
2. MatchCollection 是集合物件,包含有關匹配字串的資訊,該物件包含每個成功匹配的 Match 物件。
屬性
Count:匹配物件的總數。
Item:匹配物件的索引。
3. Match 是成功匹配的物件。
FirstIndex:匹配物件所匹配字串的起始位置。
Length:匹配物件所匹配字串的字元長度。
SubMatches:匹配物件所匹配結果的子項。
Value:匹配物件所匹配的值。
見下面的幾個簡單示例:
1.匹配過程
Function TestRegExp(myPattern As String, myString As String)
Dim objRegExp As RegExp "定義物件
Dim objMatch As Match
Dim colMatches As MatchCollection "物件包含有關匹配字串的資訊
Dim RetStr As String
Set objRegExp = New RegExp
objRegExp.Pattern = myPattern "傳入引數,用來定義正則表示式
objRegExp.IgnoreCase = True
objRegExp.Global = True
If objRegExp.Test(myString) Then "正則表示式與字串成功匹配
Set colMatches = objRegExp.Execute(myString)
For Each objMatch In colMatches
RetStr = RetStr & "發現位置" & objMatch.FirstIndex & ". 匹配值是 "" & objMatch.Value & ""." & vbCrLf
Next
Else
RetStr = "String Matching Failed"
End If
TestRegExp = RetStr
End Function
Private Sub Command1_Click()
MsgBox (TestRegExp("is.", "ISss1 is2 IS3 is4"))
End Sub
2. RegExp的Test方法:
Function bTest(ByVal s As String, ByVal p As String) As Boolean
Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = False "設定是否匹配大小寫
re.Pattern = p
bTest = re.Test(s)
Dim s As String
Dim p As String
"測試字串中是否包含數字:
p = "\d+"
MsgBox bTest(s, p)
"測試字串中是否全是由數字組成:
p = "^\d+$"
"測試字串中是否有大寫字母:
p = "[A-Z]+"
3. RegExp的Replace方法:
Function StrReplace(s As String, p As String, r As String) As String
re.IgnoreCase = True
re.Global = True
StrReplace = re.Replace(s, r)
Private Sub Command2_Click()
Dim s As String"字串
Dim p As String"正則表示式
Dim r As String"要替換的字串
"以下程式碼是替換郵箱地址
p = "w+@w+.w+"
r = "[email protected]"
s = StrReplace(s, p, r)
Debug.Print s
4. Match的SubMatches屬性:
Private Sub Command3_Click()
Dim mh As Match
Dim mhs As MatchCollection
Dim inpStr As String
re.Pattern = "(w+)@(w+).(w+)""同樣是匹配地址,注意和上例的不同
Set mhs = re.Execute(inpStr)
Set mh = mhs(0)"只有一個匹配
Print "電子郵件地址是: " & mh.Value"這裡是匹配的內容
Print "使用者名稱是:" & mh.SubMatches(0)"第一個括號中的內容
Print "郵箱是:" & mh.SubMatches(1)"第二個括號中的內容
Print "域名是: " & mh.SubMatches(2)"第三個括號中的內容
引用了Microsoft VBScript Regular Expressions 5.5 後就可以宣告正則相關物件了。主要有三個物件:RegExp、MatchCollection、Match。
1. RegExp 這是VB使用正則表示式匹配模式的主要物件了。其提供的屬性用於設定那些用來比較的傳遞給 RegExp 例項的字串的模式。 其提供的方法以確定字串是否與正則表示式的特定模式相匹配。
屬性:
Pattern:一個字串,用來定義正則表示式。
IgnoreCase:,則忽略英文字母大小的匹配,False對大小寫進行匹配。
Global:設定一個布林值或返回一個布林值,該布林值指示一個模式是必須匹配整個搜尋字串中的所有搜尋項還是隻匹配第一個搜尋項。
MultiLine:這個MS沒有介紹。查了一下資料,設定一個布林值或返回一個布林值,是否在串的多行中搜索。如果允許匹配多行文字,則multiline為true,如果搜尋必須在換行時停止,則為false 。
方法:
Execute:返回一個 MatchCollection 物件,該物件包含每個成功匹配的 Match 物件。
Replace:MS沒有介紹,這是返回一個將匹配字元替換為指定字元的字串。
Test:返回一個布林值,該值指示正則表示式是否與字串成功匹配。
2. MatchCollection 是集合物件,包含有關匹配字串的資訊,該物件包含每個成功匹配的 Match 物件。
屬性
Count:匹配物件的總數。
Item:匹配物件的索引。
3. Match 是成功匹配的物件。
屬性:
FirstIndex:匹配物件所匹配字串的起始位置。
Length:匹配物件所匹配字串的字元長度。
SubMatches:匹配物件所匹配結果的子項。
Value:匹配物件所匹配的值。
見下面的幾個簡單示例:
1.匹配過程
Function TestRegExp(myPattern As String, myString As String)
Dim objRegExp As RegExp "定義物件
Dim objMatch As Match
Dim colMatches As MatchCollection "物件包含有關匹配字串的資訊
Dim RetStr As String
Set objRegExp = New RegExp
objRegExp.Pattern = myPattern "傳入引數,用來定義正則表示式
objRegExp.IgnoreCase = True
objRegExp.Global = True
If objRegExp.Test(myString) Then "正則表示式與字串成功匹配
Set colMatches = objRegExp.Execute(myString)
For Each objMatch In colMatches
RetStr = RetStr & "發現位置" & objMatch.FirstIndex & ". 匹配值是 "" & objMatch.Value & ""." & vbCrLf
Next
Else
RetStr = "String Matching Failed"
End If
TestRegExp = RetStr
End Function
Private Sub Command1_Click()
MsgBox (TestRegExp("is.", "ISss1 is2 IS3 is4"))
End Sub
2. RegExp的Test方法:
Function bTest(ByVal s As String, ByVal p As String) As Boolean
Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = False "設定是否匹配大小寫
re.Pattern = p
bTest = re.Test(s)
End Function
Private Sub Command1_Click()
Dim s As String
Dim p As String
"測試字串中是否包含數字:
p = "\d+"
MsgBox bTest(s, p)
"測試字串中是否全是由數字組成:
p = "^\d+$"
MsgBox bTest(s, p)
"測試字串中是否有大寫字母:
p = "[A-Z]+"
MsgBox bTest(s, p)
End Sub
3. RegExp的Replace方法:
Function StrReplace(s As String, p As String, r As String) As String
Dim re As RegExp
Set re = New RegExp
re.IgnoreCase = True
re.Global = True
re.Pattern = p
StrReplace = re.Replace(s, r)
End Function
Private Sub Command2_Click()
Dim s As String"字串
Dim p As String"正則表示式
Dim r As String"要替換的字串
"以下程式碼是替換郵箱地址
p = "w+@w+.w+"
r = "[email protected]"
s = StrReplace(s, p, r)
Debug.Print s
End Sub
4. Match的SubMatches屬性:
Private Sub Command3_Click()
Dim re As RegExp
Dim mh As Match
Dim mhs As MatchCollection
Dim inpStr As String
Set re = New RegExp
re.Pattern = "(w+)@(w+).(w+)""同樣是匹配地址,注意和上例的不同
Set mhs = re.Execute(inpStr)
Set mh = mhs(0)"只有一個匹配
Print "電子郵件地址是: " & mh.Value"這裡是匹配的內容
Print "使用者名稱是:" & mh.SubMatches(0)"第一個括號中的內容
Print "郵箱是:" & mh.SubMatches(1)"第二個括號中的內容
Print "域名是: " & mh.SubMatches(2)"第三個括號中的內容