正則表達式匹配模式
引用了Microsoft VBScript Regular Expressions 5.5 后就可以聲明正則相關對象了。主要有三個對象:RegExp、MatchCollection、Match。
1. RegExp 這是VB使用正則表達式匹配模式的主要對象了。其提供的屬性用於設置那些用來比較的傳遞給 RegExp 實例的字符串的模式。 其提供的方法以確定字符串是否與正則表達式的特定模式相匹配。
屬性:
Pattern:一個字符串,用來定義正則表達式。
IgnoreCase:一個布爾值屬性,指示是否必須對一個字符串中的所有可能的匹配進行正則表達式測試。這是MS的解釋,有點費解,實際使用中的實例是,如果True,則忽略英文字母大小的匹配,False對大小寫進行匹配。
Global:設置一個布爾值或返回一個布爾值,該布爾值指示一個模式是必須匹配整個搜索字符串中的所有搜索項還是只匹配第一個搜索項。
MultiLine:這個MS沒有介紹。查了一下資料,設置一個布爾值或返回一個布爾值,是否在串的多行中搜索。如果允許匹配多行文本,則multiline為true,如果搜索必須在換行時停止,則為false 。方法:
Execute:返回一個 MatchCollection 對象,該對象包含每個成功匹配的 Match 對象。
Replace:MS沒有介紹,這是返回一個將匹配字符替換為指定字符的字符串。
Test:返回一個布爾值,該值指示正則表達式是否與字符串成功匹配。
2. MatchCollection 是集合對象,包含有關匹配字符串的信息,該對象包含每個成功匹配的 Match 對象。
屬性
Count:匹配對象的總數。
Item:匹配對象的索引。
3. Match 是成功匹配的對象。
屬性:
FirstIndex:匹配對象所匹配字符串的起始位置。
Length:匹配對象所匹配字符串的字符長度。
SubMatches:匹配對象所匹配結果的子項。
Value:匹配對象所匹配的值。
相關示例參照MS的網站:http://support.microsoft.com/kb/818802/zh-cn。MS上沒有介紹的幾個屬性和方法的使用,見下面的幾個簡單示例:
1. 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
s
=
"
我的郵箱: test@163.com 。歡迎致電!
"

'
測試字符串中是否包含數字:
p
=
"/
d+
"
MsgBox
bTest(s, p)
'
測試字符串中是否全是由數字組成:
p
=
"
^/d+$
"
MsgBox
bTest(s, p)
'
測試字符串中是否有大寫字母:
p
=
"
[A-Z]+
"
MsgBox
bTest(s, p)
End Sub
2. 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
'
要替換的字符串
'
以下代碼是替換郵箱地址
s
=
"
我的E-mail: Test@163.com 。歡迎致電!
"
p
=
"
w+@w+.w+
"
r
=
"
E_Mail@sohu.net
"
s
=
StrReplace(s, p, r)
Debug.Print s
'
結果:我的E-mail: E_Mail@sohu.net 。歡迎致電!
End Sub

3. Match的SubMatches屬性:
Private
Sub
Command3_Click()
Dim
re
As
RegExp
Dim
mh
As
Match
Dim
mhs
As
MatchCollection
Dim
inpStr
As
String
inpStr
=
"
我的E-mail: lucky@163.com 。歡迎致電!
"
Set
re
=
New
RegExp
re.Pattern
=
"
(w+)@(w+).(w+)
"
'
同樣是匹配地址,注意和上例的不同
Set
mhs
=
re.Execute(inpStr)
Set
mh
=
mhs(
0
)
'
只有一個匹配
Debug.Print
"
電子郵件地址是:
"
&
mh.Value
'
這里是匹配的內容
Debug.Print
"
用戶名是:
"
&
mh.SubMatches(
0
)
'
第一個括號中的內容
Debug.Print
"
郵箱是:
"
&
mh.SubMatches(
1
)
'
第二個括號中的內容
Debug.Print
"
域名是:
"
&
mh.SubMatches(
2
)
'
第三個括號中的內容
End Sub
