建立正規表示式
構造正規表示式的方法和建立數學表示式的方法一樣。也就是用多種元字元與操作符將小的表示式結合在一起來建立更大的表示式。可以通過在一對分隔符之間放入表示式模式的各種元件來構造乙個正規表示式。對 jscript 而言,分隔符為一對正斜槓 (/) 字元。例如:/expression/。對 vbscript 而言,則採用一對引號 ("") 來確定正規表示式的邊界。例如:"expression"。
在上面所示的兩個示例中,正規表示式模式 (expression) 均儲存在regexp 物件的pattern 屬性中。正規表示式的元件可以是單個的字元、字元集合、字元範圍、字元間的選擇或者所有這些元件的任意組合。
優先順序順序
在構造正規表示式之後,就可以象數學表示式一樣來求值,也就是說,可以從左至右並按照乙個優先順序順序來求值。下表從最高優先順序到最低優先順序列出各種正規表示式操作符的優先順序順序:
操作符 描述
\ 轉義符
(), (?:), (?=), 圓括號和方括號
*, +, ?, , , 限定符
^, $, \anymetacharacter 位置和順序
| 「或」操作
普通字元
普通字元由所有那些未顯式指定為元字元的列印和非列印字元組成。這包括所有的大寫和小寫字母字元,所有數字,所有標點符號以及一些符號。最簡單的正規表示式是乙個單獨的普通字元,可以匹配所搜尋字串中的該字元本身。例如,單字元模式 'a' 可以匹配所搜尋字串中任何位置出現的字母 'a'。這裡有一些單字元正規表示式模式的示例:
/a//7/
/m/等價的 vbscript 單字元正規表示式為:
"a""7"
"m"可以將多個單字元組合在一起得到乙個較大的表示式。例如,下面的 jscript 正規表示式不是別的,就是通過組合單字元表示式 'a'、'7'以及 'm' 所建立出來的乙個表示式。
/a7m/
等價的 vbscript 表示式為:"a7m"
請注意這裡沒有連線操作符。所需要做的就是將乙個字元放在了另乙個字元後面。
特殊字元
有不少元字元在試圖對其進行匹配時需要進行特殊的處理。要匹配這些特殊字元,必須首先將這些字元轉義,也就是在前面使用乙個反斜槓 (\)。下表給出了這些特殊字元及其含義:
特殊字元 說明
$ 匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字元本身,請使用 \$。
( ) 標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 \( 和 \)。
* 匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \*。
+ 匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 \+。
. 匹配除換行符 \n之外的任何單字元。要匹配 .,請使用 \。
[ 標記乙個中括號表示式的開始。要匹配 [,請使用 \[。
? 匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 \?。
\ 將下乙個字元標記為或特殊字元、或原義字元、或向後引用、或八進位制轉義符。例如, 'n' 匹配字元 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。
^ 匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 \^。
{ 標記限定符表示式的開始。要匹配 {,請使用 \{。
| 指明兩項之間的乙個選擇。要匹配 |,請使用 \|。
非列印字元
有不少很有用的非列印字元,偶爾必須使用。下表顯示了用來表示這些非列印字元的轉義序列:
字元 含義
\cx 匹配由x指明的控制字元。例如, \cm 匹配乙個 control-m 或回車符。x 的值必須為 a-z 或 a-z 之一。否則,將 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'、a-c'以及 a#c':
/a.c/等價的 vbscript 正規表示式為:"a.c"
如果試圖匹配乙個包含檔名的字串,其中句點 (.) 是輸入字串的一部分,則可以在正規表示式中的句點前面加上乙個反斜槓 (\) 字元來實現這一要求。舉例來說,下面的 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]/vbscript 中相同功能的表示式如下所示:"chapter [1-5]" 如果以這種方式指定範圍,則開始和結束值都包括在該範圍內。有一點特別需要注意的是,在 unicode 排序中起始值一定要在結束值之前。
如果想在括號表示式中包括連字元,則必須使用下述方法之一:
使用反斜槓將其轉義: [\-]
將連字元放在括號列表的開始和結束位置。下面的表示式能匹配所有的小寫字母和連字元: [-a-z] [a-z-]
建立乙個範圍,其中開始字元的值小於連字元,而結束字元的值等於或大於連字元。下面兩個正規表示式都滿足這一要求:[!--] [!-~]
/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]"
asp之正規表示式
將原來的值替換為新值 function replacetest sourcestr,patrn,replstr dim regex,str1,match,matches 建立變數。str1 sourcestr set regex new regexp 建立正規表示式。regex.pattern pa...
正規表示式使用詳解 2
下面,我們就通過例項看一下如何在正規表示式中使用上述元字元。s 上述正規表示式可以用於匹配目標物件中的乙個或多個空格字元。d000 如果我們手中有乙份複雜的財務報表,那麼我們可以通過上述正規表示式輕而易舉的查詢到所有總額達千元的款項。除了我們以上所介紹的元字元之外,正規表示式中還具有另外一種較為獨特...
正規表示式詳解
正規表示式 基本正規表示式主要用於grep,egrep,vi,sed,awk命令中進行字串匹配。符號 意義 c 匹配字母c 匹配任意單個字元 匹配前乙個字元出現零次或多次 匹配任意多個任意字元 匹配集合中的任意單個字元,括號中為乙個集合 x y 匹配連續的字串範圍 匹配字串的開頭 匹配字串的結尾 匹...