微軟|正則 字元匹配
句點 (.) 匹配一個字串中任何單個的列印或非列印字元,除了分行符號 (\n) 之外。下面的 Visual Basic Scripting Edition Regex可以匹配 'aac'、'abc'、'acc'、'adc'如此等等,同樣也可以匹配 'a1c'、'a2c'、a-c'以及 a#c':
/a.c/
等價的 VBScript Regex為:
"a.c"
如果試圖匹配一個包含檔案名稱的字串,其中句點 (.) 是輸入字串的一部分,則可以在Regex中的句點前面加上一個反斜線 (\) 字元來實現這一要求。舉例來說,下面的 Visual Basic Scripting Edition Regex就能匹配 'filename.ext':
/filename\.ext/
對 VBScript 而言,等價的運算式如下所示:
"filename\.ext"
這些運算式仍然是相當有限的。它們只允許匹配任何單字元。很多情況下,對從列表中匹配特殊字元十分有用。例如,如果輸入文字中包含用數字表示為Chapter 1, Chapter 2諸如此類的章區段標頭,你可能需要找到這些章區段標頭。
括號運算式
可以在一個方括弧 ([ 和 ]) 中放入一個或多個單字元,來建立一個待匹配的列表。如果字元被放入括弧中括起來,則該列表稱為括號運算式。括弧內和其他任何地方一樣,一般字元代表其本身,也就是說,它們匹配輸入文字中出現的一處自己。大多數特殊字元在位於括號運算式中時都將失去其含義。這裡有一些例外:
1. ']' 字元如果不是第一項,則將結束一個列表。要在列表中匹配 ']' 字元,請將其放在第一項,緊跟在開始的 '[' 後面。
2. '\' 仍然作為轉義符。要匹配 '\' 字元,請使用 '\\'。
括號運算式中所包含的字元只匹配該括號運算式在Regex中所處位置的一個單字元。下面的 Visual Basic Scripting Edition Regex可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5':
/Chapter ][12345]/
在 VBScript 中要匹配同樣的章區段標頭,請使用下面的運算式:
"Chapter [12345]"
請注意單詞 'Chapter' 及後面的空格與括弧內的字元的位置關係是固定的。因此,括號運算式只用來指定滿足緊跟在單詞 'Chapter' 和一個空格之後的單字元位置的字元集合。這裡是第九個字元位置。
如果希望使用範圍而不是字元本身來表示待匹配的字元,則可以使用連字號將該範圍的開始和結束字元分開。每個字元的字元值將決定其在一個範圍內的相對順序。下面的 Visual Basic Scripting Edition Regex包含了一個等價於上面所示的括弧列表的範圍運算式。
/Chapter [1-5]/
VBScipt 中相同功能的運算式如下所示:
"Chapter [1-5]"
如果以這種方式指定範圍,則開始和結束值都包括在該範圍內。有一點特別需要注意的是,在 Unicode 排序中起始值一定要在結束值之前。
如果想在括號運算式中包括連字號,則必須使用下述方法之一:
1. 使用反斜線將其轉義: [\-]
2. 將連字號放在括弧列表的開始和結束位置。下面的運算式能匹配所有的小寫字母和連字號:[-a-z],[a-z-]
3. 建立一個範圍,其中開始字元的值小於連字號,而結束字元的值等於或大於連字號。下面兩個Regex都滿足這一要求: [!--],[!-~]
同樣,通過在列表開始處放置一個插入符(^),就可以尋找所有不在列表或範圍中的字元。如果該插入符出現在列表的其他位置,則匹配其本身,沒有任何特殊含義。下面的 Visual Basic Scripting Edition Regex匹配章節號大於 5 的章區段標頭:
/Chapter [^12345]/
對 VBScript 則使用:
"Chapter [^12345]"
在上面所示的樣本中,運算式將匹配第九個位置處除1, 2, 3, 4, or 5 之外的任何數字字元。因此, 'Chapter 7' 為一個匹配,同樣 'Chapter 9' 也是如此。
上面的運算式可以使用連字號 (-) 表示。對 Visual Basic Scripting Edition 為:
/Chapter [^1-5]/
或者,對 VBScript 為:
"Chapter [^1-5]"
括號運算式的典型用法是指定對任何大寫或小寫字母字元或任何數位匹配。下面的 Visual Basic Scripting Edition 運算式給出了這一匹配:
/[A-Za-z0-9]/
等價的 VBScript 運算式為:
"[A-Za-z0-9]"