正規表示式字元匹配

2021-04-02 18:40:50 字數 3658 閱讀 7213

普通字元由所有那些未顯式指定為元字元的列印和非列印字元組成。這包括所有的大寫和小寫字母字元,所有數字,所有標點符號以及一些符號。

最簡單的正規表示式是乙個單獨的普通字元,可以匹配所搜尋字串中的該字元本身。例如,單字元模式 '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]/
vbscipt 中相同功能的表示式如下所示:

"chapter [1-5]"
如果以這種方式指定範圍,則開始和結束值都包括在該範圍內。有一點特別需要注意的是,在 unicode 排序中起始值一定要在結束值之前。

如果想在括號表示式中包括連字元,則必須使用下述方法之一:

/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]"

正規表示式匹配字元含義

正規表示式有多種不同的風格。下表是在pcre中元字元及其在正規表示式上下文中的行為的乙個完整列表 字元 描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了r...

正規表示式 單字元匹配

正規表示式 單字元匹配 匹配任意1個字元 除了 n 匹配 中列舉的字元 ab456c a za z d 匹配數字,即0 9 d 匹配非數字,即不是數字 s 匹配空白,即 空格,tab鍵 t,n s 匹配非空白 w 匹配單詞字元,即a z a z 0 9 國家的文字 w 匹配非單詞字元 匹配任意乙個數...

正規表示式 多字元匹配

正規表示式 多字元匹配 匹配的規則 字元 功能 匹配前乙個字元出現0次或者無限次,即可有可無 匹配前乙個字元出現1次或者無限次,即至少有1次 匹配前乙個字元出現1次或者0次,即要麼有1次,要麼沒有 匹配前乙個字元出現m次 d 123 匹配前乙個字元出現從m到n次 d 1234 12345 12345...