VB 正規表示式匹配模式

2021-06-27 11:32:38 字數 3341 閱讀 6258

正規表示式匹配模式  

引用了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的**:上沒有介紹的幾個屬性和方法的使用,見下面的幾個簡單示例:

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

'測試字串中是否包含數字:

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: [email protected] 。歡迎致電!"

p = "w+@w+.w+"

r = "[email protected]"

s = strreplace(s, p, r)

debug.print s

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: [email protected] 。歡迎致電!"

set re = new regexp

re.pattern = "(w+)@(w+).(w+)" '同樣是匹配位址,注意和上例的不同

set mhs = re.execute(inpstr)

set mh = mhs(0) '只有乙個匹配

debug.print "使用者名稱是: " & mh.submatches(0) '第乙個括號中的內容

debug.print "郵箱是: " & mh.submatches(1) '第二個括號中的內容

debug.print "網域名稱是:   " & mh.submatches(2) '第三個括號中的內容

end sub

正規表示式匹配模式描述

模式描述 w匹配字母數字及下劃線 w匹配非字母數字及下劃線 s匹配任意空白字元,等價於 t n r f s匹配任意非空字元 d匹配任意數字,等價於 0 9 d匹配任意非數字 a匹配字串開始 z匹配字串結束,如果是存在換行,只匹配到換行前的結束字串 z匹配字串結束 g匹配最後匹配完成的位置 n匹配乙個...

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...