VB6.0如何使用Regex
最近在用VB6解決一個網頁解析的應用,涉及到了正則。如何在VB6中使用Regex,這個在MS網站上有介紹,不過介紹的不是很全面。下面結合MS網站的內容和搜尋到的東西,自己匯總一下。
引用了Microsoft VBScript Regular Expressions 5.5 後就可以聲明正則相關對象了。主要有三個對象:RegExp、MatchCollection、Match。
1. RegExp
這是VB使用Regex匹配模式的主要對象了。其提供的屬性用於設定那些用來比較的傳遞給 RegExp 執行個體的字串的模式。 其提供的方法以確定字串是否與Regex的特定模式相匹配。
屬性:
Pattern
:一個字串,用來定義Regex。
IgnoreCase
:一個布爾值屬性,指示是否必須對一個字串中的所有可能的匹配進行Regex測試。這是MS的解釋,有點費解,實際使用中的執行個體是,如果True,則忽略英文字母大小的匹配,False對大小寫進行匹配。
Global
:設定一個布爾值或返回一個布爾值,該布爾值指示一個模式是必須匹配整個搜尋字串中的所有搜尋項還是只匹配第一個搜尋項。
MultiLine
:這個MS沒有介紹。查了一下資料,設定一個布爾值或返回一個布爾值,是否在串的多行中搜尋。如果允許匹配多行文本,則multiline為true,如果搜尋必須在換行時停止,則為false 。
方法:
Execute
:返回一個 MatchCollection 對象,該對象包含每個成功匹配的 Match 對象。
Replace
:MS沒有介紹,這是返回一個將匹配字元替換為指定字元的字串。
Test
:返回一個布爾值,該值指示Regex是否與字串成功匹配。
2. MatchCollection
是集合對象,包含有關匹配字串的資訊,該對象包含每個成功匹配的 Match 對象。
屬性
Count
:匹配對象的總數。
Item
:匹配對象的索引。
3. Match
是成功匹配的對象。
屬性:
FirstIndex
:匹配對象所匹配字串的起始位置。
Length
:匹配對象所匹配字串的字元長度。
SubMatches
:匹配對象所匹配結果的子項。
Value
:匹配對象所匹配的值。
相關樣本參照MS的網站:http://support.microsoft.com/kb/818802/zh-cn
。MS上沒有介紹的幾個屬性和方法的使用,見下面的幾個簡單樣本:1. RegExp的Test方法:
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
'
Regex
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