正規表示式使用指南二

2021-04-06 21:21:15 字數 3104 閱讀 7152

下表從最高到最低說明了各種正規表示式運算子的優先順序順序:

運算子 說明

/ 轉義符

(), (?:), (?=), 括號和中括號

, +, ?, , , 限定符

^, $, /anymetacharacter, anycharacter 定位點和序列

| 替換

字元的優先順序比替換運算子高,替換運算子允許「m|food」與「m」或「food」匹配。若要匹配「mood」或「food」,請使用括號建立子表示式,從而產生「(m|f)ood」。

普通字元包括沒有顯式指定為元字元的所有可列印和不可列印字元。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。

正規表示式的最簡單形式是在搜尋字串中匹配其本身的單個普通字元。例如,單字元模式,如 a,不論出現在搜尋字串中的何處,它總是匹配字母 a。下面是一些單字元正規表示式模式的示例:

/a//7/

/m/可以將許多單字元組合起來以形成大的表示式。例如,以下正規表示式組合了單字元表示式:a、7 和 m。

/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)。下面的正規表示式匹配 aac、abc、acc、adc 等等,以及 a1c、a2c、a-c 和 a#c:

/a.c/

若要匹配包含檔名的字串,而句點 (.) 是輸入字串的組成部分,請在正規表示式中的句點前面加反斜扛 (/) 字元。舉例來說明,下面的正規表示式匹配 filename.ext:

/filename/.ext/

這些表示式只讓您匹配「任何」單個字元。可能需要匹配列表中的特定字元組。例如,可能需要查詢用數字表示的章節標題(chapter 1、chapter 2 等等)。

中括號表示式

若要建立匹配字元組的乙個列表,請在方括號([ 和 ])內放置乙個或更多單個字元。當字元括在中括號內時,該列表稱為「中括號表示式」。與在任何別的位置一樣,普通字元在中括號內表示其本身,即,它在輸入 文字中匹配一次其本身。大多數特殊字元在中括號表示式內出現時失去它們的意義。不過也有一些例外,如:

如果 ] 字元不是第一項,它結束乙個列表。若要匹配列表中的 ] 字元,請將它放在第一位,緊跟在開始 [ 後面。

/ 字元繼續作為轉義符。若要匹配 / 字元,請使用 //。 

括在中括號表示式中的字元只匹配處於正規表示式中該位置的單個字元。以下正規表示式匹配 chapter 1、chapter 2、chapter 3、chapter 4 和 chapter 5:

/chapter [12345]/

請注意,單詞 chapter 和後面的空格的位置相對於中括號內的字元是固定的。中括號表示式指定的只是匹配緊跟在單詞 chapter 和空格後面的單個字元位置的字符集。這是第九個字元位置。

若要使用範圍代替字元本身來表示匹配字元組,請使用連字元 (-) 將範圍中的開始字元和結束字元分開。單個字元的字元值確定範圍內的相對順序。下面的正規表示式包含範圍表示式,該範圍表示式等效於上面顯示的中括號中的列表。

/chapter [1-5]/

當以這種方式指定範圍時,開始值和結束值兩者都包括在範圍內。注意,還有一點很重要,按 unicode 排序順序,開始值必須在結束值的前面。

若要在中括號表示式中包括連字元,請採用下列方法之一:

/chapter [^12345]/

在上面的示例中,表示式在第九個位置匹配 1、2、3、4 或 5 之外的任何數字字元。這樣,例如,chapter 7 就是乙個匹配項,chapter 9 也是乙個匹配項。

上面的表示式可以使用連字元 (-) 來表示:

/chapter [^1-5]/

中括號表示式的典型用途是指定任何大寫或小寫字母或任何數字的匹配。下面的表示式指定這樣的匹配:

/[a-za-z0-9]/

正規表示式使用指南四

本節前面的主題中的示例只涉及章節標題查詢。字串 chapter 後面跟空格和數字的任何匹配項可能是實際章節標題,或者也可能是指向另一章的交叉引用。由於真正的章節標題總是出現在行的開始,所以設計一種方法只查詢標題而不查詢交叉引用可能很有用。定位點提供該能力。定位點使您能夠將正規表示式固定到行首或行尾。...

正規表示式使用指南六

正規表示式的最重要功能之一是儲存匹配的模式的一部分以供以後重新使用的能力。您可能想起,若在正規表示式模式或模式的一部分兩側加上括號,就會導致表示式的一部分被儲存到臨時緩衝區中。可以通過使用非捕獲元字元 或 來重寫捕獲。每個捕獲的子匹配項按照它們在正規表示式模式中從左到右出現的順序儲存。緩衝區編號從 ...

正規表示式使用指南七

正規表示式 符號匹配字串的開頭。例如 abc 與 abc xyz 匹配,而不與 xyz abc 匹配 符號匹配字串的結尾。例如 abc 與 xyz abc 匹配,而不與 abc xyz 匹配。注意 如果同時使用 符號和 符號,將進行精確匹配。例如 abc 只與 abc 匹配 符號匹配0個或多個前面的...