引用了Microsoft VBScript Regular Expressions 5.5 後就可以聲明正則相關對象了。主要有三個對象:RegExp、MatchCollection、Match。
VBA 中使用正規表達式
[vb] view plain copy print ?
- Dim objRegExp As Object
- Set objRegExp = CreateObject("vbscript.regexp")
- objRegExp.Pattern = "H...o" '正規表達式
- objRegExp.IgnoreCase = True '忽略大小寫
- objRegExp.Test("Hello") '要比對的字元
Dim objRegExp As Object Set objRegExp = CreateObject("vbscript.regexp") objRegExp.Pattern = "H...o" '正規表達式 objRegExp.IgnoreCase = True '忽略大小寫 objRegExp.Test("Hello") '要比對的字元
RegExp
這是VB使用正規表達式比對模式的主要對象了。其提供的屬性用于設定那些用來比較的傳遞給 RegExp 執行個體的字元串的模式。 其提供的方法以确定字元串是否與正規表達式的特定模式相比對。
屬性
Pattern:一個字元串,用來定義正規表達式。
IgnoreCase:一個布爾值屬性,訓示是否必須對一個字元串中的所有可能的比對進行正規表達式測試。這是MS的解釋,有點費解,實際使用中的執行個體是,如果True,則忽略英文字母大小的比對,False對大小寫進行比對。
Global:設定一個布爾值或傳回一個布爾值,該布爾值訓示一個模式是必須比對整個搜尋字元串中的所有搜尋項還是隻比對第一個搜尋項。
MultiLine:這個MS沒有介紹。查了一下資料,設定一個布爾值或傳回一個布爾值,是否在串的多行中搜尋。如果允許比對多行文本,則multiline為true,如果搜尋必須在換行時停止,則為false 。
方法
Execute:傳回一個 MatchCollection 對象,該對象包含每個成功比對的 Match 對象。
Replace:MS沒有介紹,這是傳回一個将比對字元替換為指定字元的字元串。
Test:傳回一個布爾值,該值訓示正規表達式是否與字元串成功比對。
RegExp的Test方法
[vb] view plain copy print ?
- 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
- s = "我的郵箱: [email protected] 。歡迎緻電!"
- '測試字元串中是否包含數字:
- p = "/d+"
- MsgBox bTest(s, p)
- '測試字元串中是否全是由數字組成:
- p = "^/d+$"
- MsgBox bTest(s, p)
- '測試字元串中是否有大寫字母:
- p = "[A-Z]+"
- MsgBox bTest(s, p)
- End Sub
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 s = "我的郵箱: [email protected] 。歡迎緻電!" '測試字元串中是否包含數字: p = "/d+" MsgBox bTest(s, p) '測試字元串中是否全是由數字組成: p = "^/d+$" MsgBox bTest(s, p) '測試字元串中是否有大寫字母: p = "[A-Z]+" MsgBox bTest(s, p) End Sub
RegExp的Replace方法
[vb] view plain copy print ?
- 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 '要替換的字元串
- '以下代碼是替換郵箱位址
- s = "我的E-mail: [email protected] 。歡迎緻電!"
- p = "[email protected]+.w+"
- r = "[email protected]"
- s = StrReplace(s, p, r)
- Debug.Print s
- '結果:我的E-mail: [email protected] 。歡迎緻電!
- End Sub
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 '要替換的字元串 '以下代碼是替換郵箱位址 s = "我的E-mail: [email protected] 。歡迎緻電!" p = "[email protected]+.w+" r = "[email protected]" s = StrReplace(s, p, r) Debug.Print s '結果:我的E-mail: [email protected] 。歡迎緻電! End Sub