普通字符由所有那些未顯式指定為元字符的打印和非打印字符組成。這包括所有的大寫和小寫字母字符,所有數字,所有標點符號以及一些符號。
最簡單的正則表達式是一個單獨的普通字符,可以匹配所搜索字符串中的該字符本身。例如,單字符模式'A' 可以匹配所搜索字符串中任何位置出現的字母'A'。這裡有一些單字符正則表達式模式的示例:
/a/ /7/ /M/等價的VBScript 單字符正則表達式為:
a 7 M可以將多個單字符組合在一起得到一個較大的表達式。例如,下面的JScript 正則表達式不是別的,就是通過組合單字符表達式'a'、'7'以及'M' 所創建出來的一個表達式。
/a7M/等價的VBScript 表達式為:
a7M請注意這裡沒有連接操作符。所需要做的就是將一個字符放在了另一個字符後面。
有不少元字符在試圖對其進行匹配時需要進行特殊的處理。要匹配這些特殊字符,必須首先將這些字符轉義,也就是在前面使用一個反斜杠(/)。下表給出了這些特殊字符及其含義:
| 特殊字符 | 說明 |
|---|---|
| $ | 匹配輸入字符串的結尾位置。如果設置了RegExp對象的Multiline屬性,則$ 也匹配'/n' 或'/r'。要匹配$ 字符本身,請使用/$。 |
| ( ) | 標記一個子表達式的開始和結束位置。子表達式可以獲取供以後使用。要匹配這些字符,請使用/( 和/)。 |
| * | 匹配前面的子表達式零次或多次。要匹配* 字符,請使用/*。 |
| + | 匹配前面的子表達式一次或多次。要匹配+ 字符,請使用/+。 |
| . | 匹配除換行符/n之外的任何單字符。要匹配.,請使用/。 |
| [ | 標記一個中括號表達式的開始。要匹配[,請使用/[。 |
| ? | 匹配前面的子表達式零次或一次,或指明一個非貪婪限定符。要匹配? 字符,請使用/?。 |
| / | 將下一個字符標記為或特殊字符、或原義字符、或後向引用、或八進制轉義符。例如, 'n' 匹配字符'n'。 '/n' 匹配換行符。序列'//' 匹配/,而'/(' 則匹配(。 |
| ^ | 匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。要匹配^ 字符本身,請使用/^。 |
| { | 標記限定符表達式的開始。要匹配{,請使用/{。 |
| | | 指明兩項之間的一個選擇。要匹配|,請使用/|。 |
有不少很有用的非打印字符,偶爾必須使用。下表顯示了用來表示這些非打印字符的轉義序列:
| 字符 | 含義 |
|---|---|
| /c x | 匹配由x指明的控製字符。例如, /cM 匹配一個Control-M 或回車符。 x的值必須為AZ 或az 之一。否則,將c 視為一個原義的'c' 字符。 |
| /f | 匹配一個換頁符。等價於/x0c 和/cL。 |
| /n | 匹配一個換行符。等價於/x0a 和/cJ。 |
| /r | 匹配一個回車符。等價於/x0d 和/cM。 |
| /s | 匹配任何空白字符,包括空格、製表符、換頁符等等。等價於[/f/n/r/t/v]。 |
| /S | 匹配任何非空白字符。等價於[^/f/n/r/t/v]。 |
| /t | 匹配一個製表符。等價於/x09 和/cI。 |
| /v | 匹配一個垂直製表符。等價於/x0b 和/cK。 |
句點(.) 匹配一個字符串中任何單個的打印或非打印字符,除了換行符(/n) 之外。下面的JScript 正則表達式可以匹配'aac'、'abc'、'acc'、'adc'如此等等,同樣也可以匹配'a1c'、'a2c'、ac'以及a#c':
/ac/等價的VBScript 正則表達式為:
ac如果試圖匹配一個包含文件名的字符串,其中句點(.) 是輸入字符串的一部分,則可以在正則表達式中的句點前面加上一個反斜杠(/) 字符來實現這一要求。舉例來說,下面的JScript 正則表達式就能匹配'filename.ext':
/filename/.ext/對VBScript 而言,等價的表達式如下所示:
filename/.ext這些表達式仍然是相當有限的。它們只允許匹配任何單字符。很多情況下,對從列表中匹配特殊字符十分有用。例如,如果輸入文字中包含用數字表示為Chapter 1, Chapter 2諸如此類的章節標題,你可能需要找到這些章節標題。
可以在一個方括號([ 和]) 中放入一個或多個單字符,來創建一個待匹配的列表。如果字符被放入括號中括起來,則該列表稱為括號表達式。括號內和其他任何地方一樣,普通字符代表其本身,也就是說,它們匹配輸入文字中出現的一處自己。大多數特殊字符在位於括號表達式中時都將失去其含義。這裡有一些例外:
括號表達式中所包含的字符只匹配該括號表達式在正則表達式中所處位置的一個單字符。下面的JScript 正則表達式可以匹配'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及'Chapter 5':
/Chapter [12345]/在VBScript 中要匹配同樣的章節標題,請使用下面的表達式:
Chapter [12345]請注意單詞'Chapter' 及後面的空格與括號內的字符的位置關係是固定的。因此,括號表達式只用來指定滿足緊跟在單詞'Chapter' 和一個空格之後的單字符位置的字符集合。這裡是第九個字符位置。
如果希望使用範圍而不是字符本身來表示待匹配的字符,則可以使用連字符將該範圍的開始和結束字符分開。每個字符的字符值將決定其在一個範圍內的相對順序。下面的JScript 正則表達式包含了一個等價於上面所示的括號列表的範圍表達式。
/Chapter [1-5]/VBScipt 中相同功能的表達式如下所示:
Chapter [1-5]如果以這種方式指定範圍,則開始和結束值都包括在該範圍內。有一點特別需要注意的是,在Unicode 排序中起始值一定要在結束值之前。
如果想在括號表達式中包括連字符,則必須使用下述方法之一:
[/-] [-az] [az-] [!--] [!-~]同樣,通過在列表開始處放置一個插入符(^),就可以查找所有不在列表或範圍中的字符。如果該插入符出現在列表的其他位置,則匹配其本身,沒有任何特殊含義。下面的JScript 正則表達式匹配章節號大於5 的章節標題:
/Chapter [^12345]/對VBScript 則使用:
Chapter [^12345]在上面所示的示例中,表達式將匹配第九個位置處除1, 2, 3, 4, or 5 之外的任何數字字符。因此, 'Chapter 7' 為一個匹配,同樣'Chapter 9' 也是如此。
上面的表達式可以使用連字符(-) 表示。對JScript 為:
/Chapter [^1-5]/或者,對VBScript 為:
Chapter [^1-5]括號表達式的典型用法是指定對任何大寫或小寫字母字符或任何數字的匹配。下面的JScript 表達式給出了這一匹配:
/[A-Za-z0-9]/等價的VBScript 表達式為:
[A-Za-z0-9]