在VBA中使用正則表達式,可以通過下列途徑實現:
創建正則表達式對象:
前期綁定:在VBA代碼編輯器中的"Tools"菜單中,選中"References...",然后引用Microsoft VBScript Regular Expressions 5.5類庫,然后直接定義對象:Dim reg As New RegExp。
后期綁定:使用CreateObject方法定義對象:CreateObject("VBSCRIPT.REGEXP")。
前一種方式的優點是可以有編輯器的Intellisense支持。
RegExp對象的屬性:
Global - 設置或返回一個 Boolean 值,該值指明在整個搜索字符串時模式是全部匹配還是只匹配第一個。如果搜索應用於整個字符串,Global 屬性的值應該為 True,否則其值為 False。默認的設置為True。
Multiline - 返回正則表達式是否具有標志m, 缺省值為False。如果指定的搜索字符串分布在多行,這個屬性是要設置為True的。
IgnoreCase - 設置或返回一個Boolean值,指明模式搜索是否區分大小寫。如果搜索是區分大小寫的,則 IgnoreCase 屬性應該為False;否則應該設為True。缺省值為True。
Pattern - 設置或返回被搜索的正則表達式模式。 被搜索的正則字符串表達式。它包含各種正則表達式字符。
RegExp對象的方法:
Execute - 對指定的字符串執行正則表達式搜索。需要傳入要在其上執行正則表達式的文本字符串。正則表達式搜索的設計模式是通過 RegExp對象的Pattern來設置的。Execute方法返回一個Matches集合,其中包含了在string中找到的每一個匹配的Match對象。如果未找到匹配,Execute將返回空的Matches集合。
Replace - 替換在正則表達式查找中找到的文本。
Test - 對指定的字符串執行一個正則表達式搜索,並返回一個 Boolean 值指示是否找到匹配的模式。RegExp.Global屬性對Test方法沒有影響。如果找到了匹配的模式,Test方法返回True;否則返回False。
MatchCollection對象與Match對象
匹配到的所有對象放在MatchCollection集合中,這個集合對象只有兩個只讀屬性:
Count:匹配到的對象的數目
Item:集合的又一通用方法,需要傳入Index值獲取指定的元素。
一般,可以使用For Each語句枚舉集合中的對象。集合中對象的類型是Match。
Match對象有以下幾個只讀的屬性:
FirstIndex - 匹配字符串在整個字符串中的位置,值從0開始。
Length - 匹配字符串的長度。
Value - 匹配的字符串。
SubMatches - 集合,匹配字符串中每個分組的值。作為集合類型,有Count和Item兩個屬性。
正則表達式很強大,是處理文本的首選,不管你信不信,反正我是信了。說了很多,最后以一個小例子結尾吧:
Dim reg As New RegExp
With reg
.Global = True
.IgnoreCase = True
.Pattern = " \d+ "
End With
Dim mc As MatchCollection
Dim m As Match
Set mc = reg.Execute( " 123aaaaa987uiiui999 " )
For Each m In mc
MsgBox m.Value
Next
End Sub