溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

VBS中正則表達(dá)式如何實(shí)現(xiàn)選擇與編組

發(fā)布時(shí)間:2021-09-28 17:20:02 來(lái)源:億速云 閱讀:138 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)VBS中正則表達(dá)式如何實(shí)現(xiàn)選擇與編組的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

選擇與編組

選擇允許使用 '|' 字符來(lái)在兩個(gè)或多個(gè)候選項(xiàng)中進(jìn)行選擇。通過(guò)擴(kuò)展章節(jié)標(biāo)題的正則表達(dá)式,可以將其擴(kuò)充為不僅僅適用于章節(jié)標(biāo)題的表達(dá)式。不過(guò),這可沒(méi)有想象的那么直接。在使用選擇時(shí),將匹配'|' 字符每邊最可能的表達(dá)式。你可能認(rèn)為下面的 Visual Basic Scripting Edition 和 VBScript 表達(dá)式將匹配位于一行的開(kāi)始和結(jié)束位置且后跟一個(gè)或兩個(gè)數(shù)字的 'Chapter' 或 'Section':

/^Chapter|Section [1-9][0-9]{0,1}$/"^Chapter|Section [1-9][0-9]{0,1}$"

不幸的是,真正的情況是上面所示的正則表達(dá)式要么匹配位于一行開(kāi)始處的單詞 'Chapter',要么匹配一行結(jié)束處的后跟任何數(shù)字的 'Section'。如果輸入字符串為 'Chapter 22',上面的表達(dá)式將只匹配單詞 'Chapter'。如果輸入字符串為 'Section 22',則該表達(dá)式將匹配 'Section 22'。但這種結(jié)果不是我們此處的目的,因此必須有一種辦法來(lái)使正則表達(dá)式對(duì)于所要做的更易于響應(yīng),而且確實(shí)也有這種方法。

可以使用圓括號(hào)來(lái)限制選擇的范圍,也就是說(shuō)明確該選擇只適用于這兩個(gè)單詞 'Chapter' 和 'Section'。不過(guò),圓括號(hào)同樣也是難處理的,因?yàn)樗鼈円灿脕?lái)創(chuàng)建子表達(dá)式,有些內(nèi)容將在后面關(guān)于子表達(dá)式的部分介紹。通過(guò)采用上面所示的正則表達(dá)式并在適當(dāng)位置添加圓括號(hào),就可以使該正則表達(dá)式既可以匹配 'Chapter 1',也可以匹配 'Section 3'。

下面的正則表達(dá)式使用圓括號(hào)將 'Chapter' 和 'Section' 組成一組,所以該表達(dá)式才能正確工作。對(duì) Visual Basic Scripting Edition 為:

/^(Chapter|Section) [1-9][0-9]{0,1}$/

對(duì) VBScript 為:

"^(Chapter|Section) [1-9][0-9]{0,1}$"

這些表達(dá)式工作正確,只是產(chǎn)生了一個(gè)有趣的副產(chǎn)品。在 'Chapter|Section' 兩邊放置圓括號(hào)建立了適當(dāng)?shù)木幗M,但也導(dǎo)致兩個(gè)待匹配單詞之一都被捕獲供今后使用。由于在上面所示的表達(dá)式中只有一組圓括號(hào),因此只能有一個(gè)捕獲的 submatch??梢允褂?VBScript 的Submatches 集合或者Visual Basic Scripting Edition 中RegExp 對(duì)象的 $1-$9 屬性來(lái)引用這個(gè)子匹配。

有時(shí)捕獲一個(gè)子匹配是所希望的,有時(shí)則是不希望的。在說(shuō)明所示的示例中,真正想做的就是使用圓括號(hào)對(duì)單詞 'Chapter' 或 'Section' 之間的選擇編組。并不希望在后面再引用該匹配。實(shí)際上,除非真的是需要捕獲子匹配,否則請(qǐng)不要使用。由于不需要花時(shí)間和內(nèi)存來(lái)存儲(chǔ)那些子匹配,這種正則表達(dá)式的效率將更高。

可以在正則表達(dá)式模式圓括號(hào)內(nèi)部的前面使用 '?:'來(lái)防止存儲(chǔ)該匹配供今后使用。對(duì)上面所示正則表達(dá)式的下述修改提供了免除子匹配存儲(chǔ)的相同功能。對(duì) Visual Basic Scripting Edition:

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

對(duì) VBScript:

"^(?:Chapter|Section) [1-9][0-9]{0,1}$"

除了 '?:' 元字符,還有兩個(gè)非捕獲元字符用于稱(chēng)之為預(yù)查的匹配。一個(gè)為正向預(yù)查,用 ?= 表示, 在任何開(kāi)始匹配圓括號(hào)內(nèi)的正則表達(dá)式模式的位置來(lái)匹配搜索字符串。一個(gè)為負(fù)向預(yù)查,用 '?!' 表示,在任何開(kāi)始不匹配該正則表達(dá)式模式的位置來(lái)匹配搜索字符串。

例如,假定有一個(gè)包含引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文檔。進(jìn)一步假設(shè)需要更新該文檔,方法是查找所有對(duì) Windows 95、Windows 98 以及 Windows NT 的引用,并將這些引用更改為 Windows 2000??梢允褂孟旅娴?Visual Basic Scripting Edition 正則表達(dá)式,這是一個(gè)正向預(yù)查,來(lái)匹配 Windows 95、Windows 98 以及 Windows NT:

/Windows(?=95 |98 |NT )/

在 VBScript 要進(jìn)行同樣的匹配可以使用下述表達(dá)式:

"Windows(?=95 |98 |NT )"

找到一個(gè)匹配后,緊接匹配到的文字(而不包括預(yù)查中使用的字符)就開(kāi)始對(duì)下一次匹配的搜索。例如,如果上面所示的表達(dá)式匹配到 'Windows 98',則將從 'Windows' 而不是 '98' 之后繼續(xù)查找。

感謝各位的閱讀!關(guān)于“VBS中正則表達(dá)式如何實(shí)現(xiàn)選擇與編組”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI