正規表示式簡介(微軟) 13 選擇與編組

2021-04-01 22:43:29 字數 2003 閱讀 1367

選擇與編組

選擇允許使用 '|' 字元來在兩個或多個候選項中進行選擇。通過擴充套件章節標題的正規表示式,可以將其擴充為不僅僅適用於章節標題的表示式。不過,這可沒有想象的那麼直接。在使用選擇時,將匹配'|' 字元每邊最可能的表示式。你可能認為下面的 visual basic scripting edition 和 vbscript 表示式將匹配位於一行的開始和結束位置且後跟乙個或兩個數字的 'chapter' 或 'section':

/^chapter|section [1-9][0-9]$/

"^chapter|section [1-9][0-9]$"

不幸的是,真正的情況是上面所示的正規表示式要麼匹配位於一行開始處的單詞 'chapter',要麼匹配一行結束處的後跟任何數字的 'section'。如果輸入字串為 'chapter 22',上面的表示式將只匹配單詞 'chapter'。如果輸入字串為 'section 22',則該表示式將匹配 'section 22'。但這種結果不是我們此處的目的,因此必須有一種辦法來使正規表示式對於所要做的更易於響應,而且確實也有這種方法。

可以使用圓括號來限制選擇的範圍,也就是說明確該選擇只適用於這兩個單詞 'chapter' 和 'section'。不過,圓括號同樣也是難處理的,因為它們也用來建立子表示式,有些內容將在後面關於子表示式的部分介紹。通過採用上面所示的正規表示式並在適當位置新增圓括號,就可以使該正規表示式既可以匹配 'chapter 1',也可以匹配 'section 3'。

下面的正規表示式使用圓括號將 'chapter' 和 'section' 組成一組,所以該表示式才能正確工作。對 visual basic scripting edition 為:

/^(chapter|section) [1-9][0-9]$/

對 vbscript 為:

"^(chapter|section) [1-9][0-9]$"

這些表示式工作正確,只是產生了乙個有趣的副產品。在 'chapter|section' 兩邊放置圓括號建立了適當的編組,但也導致兩個待匹配單詞之一都**獲供今後使用。由於在上面所示的表示式中只有一組圓括號,因此只能有乙個捕獲的 submatch。可以使用 vbscript 的submatches 集合或者visual basic scripting edition 中regexp 物件的 $1-$9 屬性來引用這個子匹配。

有時捕獲乙個子匹配是所希望的,有時則是不希望的。在說明所示的示例中,真正想做的就是使用圓括號對單詞 'chapter' 或 'section' 之間的選擇編組。並不希望在後面再引用該匹配。實際上,除非真的是需要捕獲子匹配,否則請不要使用。由於不需要花時間和記憶體來儲存那些子匹配,這種正規表示式的效率將更高。

可以在正規表示式模式圓括號內部的前面使用 '?:'來防止儲存該匹配供今後使用。對上面所示正規表示式的下述修改提供了免除子匹配儲存的相同功能。對 visual basic scripting edition:

/^(?:chapter|section) [1-9][0-9]$/

對 vbscript:

"^(?:chapter|section) [1-9][0-9]$"

除了 '?:' 元字元,還有兩個非捕獲元字元用於稱之為預查的匹配。乙個為正向預查,用 ?= 表示, 在任何開始匹配圓括號內的正規表示式模式的位置來匹配搜尋字串。乙個為負向預查,用 '?!' 表示,在任何開始不匹配該正規表示式模式的位置來匹配搜尋字串。

例如,假定有乙個包含引用有 windows 3.1、windows 95、windows 98 以及 windows nt 的文件。進一步假設需要更新該文件,方法是查詢所有對 windows 95、windows 98 以及 windows nt 的引用,並將這些引用更改為 windows 2000。可以使用下面的 visual basic scripting edition 正規表示式,這是乙個正向預查,來匹配 windows 95、windows 98 以及 windows nt:

/windows(?=95 |98 |nt )/

在 vbscript 要進行同樣的匹配可以使用下述表示式:

"windows(?=95 |98 |nt )"

正規表示式簡介(微軟) 3 使用正規表示式

使用正規表示式 在典型的搜尋和替換操作中,必須提供要查詢的確切文字。這種技術對於靜態文字中的簡單搜尋和替換任務可能足夠了,但是由於它缺乏靈活性,因此在搜尋動態文字時就有困難了,甚至是不可能的。使用正規表示式,就可以 1.測試字串的某個模式。例如,可以對乙個輸入字串進行測試,看在該字串是否存在乙個 號...

微軟的正規表示式教程(一) 正規表示式簡介

微軟的正規表示式教程 一 正規表示式簡介 認識正規表示式 如果原來沒有使用過正規表示式,那麼可能對這個術語和概念會不太熟悉。不過,它們並不是您想象的那麼新奇。請回想一下在硬碟上是如何查詢檔案的。您肯定會使用 和 字元來幫助查詢您正尋找的檔案。字元匹配檔名中的單個字元,而 則匹配乙個或多個字元。乙個如...

正規表示式簡介

乙個正規表示式就是乙個模式,由與文字進行匹配的字串行組成。正規表示式有著廣泛的應用 grep sed vim make等等,某些指令碼語言如perl等更是將正規表示式納入語言內部。正規表示式由原子和運算子組成。最簡單的原子是單個字元,如果乙個正規表示式由單個字元組成,則該字元必須出現在目標文字的某處...