正規表示式其實很簡單

2021-08-11 08:23:32 字數 3166 閱讀 9474

一、正規表示式定義

正規表示式(regular expression)描述了一種字串匹配的模式,可以用來檢查乙個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。

正規表示式是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。

二、正規表示式的構成–字元

1、普通字元

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

2、非列印字元

\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。

3、特殊字元

所謂特殊字元,就是一些有特殊含義的字元,如上面說的」.txt」中的,簡單的說就是表示任何字串的意思。如果要查詢檔案名中有*的檔案,則需要對*進行轉義,即在其前加乙個\。ls *.txt。正規表示式有以下特殊字元。

$ :匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字元本身,請使用 \$。 

():標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 \( 和 \)。

* :匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 \*。

+ :匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 \+。

. :匹配除換行符 \n之外的任何單字元。要匹配 .,請使用 \。

[ :標記乙個中括號表示式的開始。要匹配 [,請使用 \[。

? :匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 \?。

\ :將下乙個字元標記為或特殊字元、或原義字元、或向後引用、或八進位制轉義符。例如, 'n' 匹配字元 'n'。'\n' 匹配換行符。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("。

^ :匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 \^。

或或共6種。

*、+和?限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上乙個?就可以實現非貪婪或最小匹配。

正規表示式的限定符有:

* :匹配前面的子表示式零次或多次。* 等價於。

+ :匹配前面的子表示式一次或多次。+ 等價於 。

? :匹配前面的子表示式零次或一次。? 等價於 。

:n 是乙個非負整數。匹配確定的 n 次 。

:n 是乙個非負整數。至少匹配n 次。'o' 則等價於 'o*'。

:m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。

5、定位符

用來描述字串或單詞的邊界,^和$分別指字串的開始與結束,\b描述單詞的前或後邊界,\b表示非單詞邊界。不能對定位符使用限定符。

三、各種操作符的運算優先順序

相同優先順序的從左到右進行運算,不同優先順序的運算先高後低。各種操作符的優先順序從高到低如下:

四、其他符號

(pattern):匹配 pattern 並獲取這一匹配。所獲取的匹配可以從產生的 matches 集合得到,在vbscript 中使用 submatches 集合,在jscript 中則使用 $0…$9 屬性。要匹配圓括號字元,請使用 '\(' 或 '\)'。

(?:pattern):匹配 pattern 但不獲取匹配結果,也就是說這是乙個非獲取匹配,不進行儲存供以後使用。這在使用 "或" 字元 (|) 來組合乙個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是乙個比 '

industry|industries' 更簡略的表示式。

(?=pattern):正向預查,在任何匹配 pattern 的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如,'windows (?=95|98|nt|2000)' 能匹配 "windows 2000" 中的 "windows" ,但不能匹配 "windows 3.1" 中的 "windows"。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

(?!pattern):負向預查,在任何不匹配 pattern 的字串開始處匹配查詢字串。這是乙個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'windows (?!95|98|nt|2000)' 能匹配 "windows 3.1" 中的 "windows",但不能匹配 "windows 2000" 中的 "windows"。預查不消耗字元,也就是說,在乙個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。

x|y :匹配 x 或 y。

[xyz] :字元集合。匹配所包含的任意乙個字元。

[^xyz] :負值字元集合。匹配未包含的任意字元。

[a-z] :字元範圍。匹配指定範圍內的任意字元。例如,'[a-z]' 可以匹配 'a' 到 'z' 範圍內的任意小寫字母字元。

[^a-z] :負值字元範圍。匹配任何不在指定範圍內的任意字元。例如,'[^a-z]' 可以匹配任何不在 'a' 到 'z' 範圍內的任意字元。

五、部分例子

正規表示式簡單語法及常用正規表示式

基本符號 表示匹配字串的開始位置 例外 用在中括號中 時,可以理解為取反,表示不匹配括號中字串 表示匹配字串的結束位置 表示匹配 零次到多次 表示匹配 一次到多次 至少有一次 表示匹配零次或一次 表示匹配單個字元 表示為或者,兩項中取一項 小括號表示匹配括號中全部字元 中括號表示匹配括號中乙個字元 ...

正規表示式簡單語法及常用正規表示式

表示匹配字串的開始位置 例外 用在中括號中 時,可以理解為取反,表示不匹配括號中字串 表示匹配字串的結束位置 匹配中文字元的正規表示式 u4e00 u9fa5 匹配雙位元組字元 包括漢字在內 x00 xff 匹配空行的正規表示式 n s r 匹配html標記的正規表示式 匹配首尾空格的正規表示式 s...

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...