正規表示式(regular expression,在**中常簡寫為 regex、regexp 或 re),又稱 正規表示式、正規表示法、正規表示式、規則表示式、常規表示法,是電腦科學的乙個概念。正規表示式使用單個字串來描述、匹配一系列匹配某個句法規則的字串。在很多文字編輯器裡,正規表示式通常被用來檢索、替換那些匹配某個模式的文字。
不同的正規表示式符號如何數學上的 +
++,−
-−,×
\times
×,÷\div
÷ 一樣,具體不同的優先順序。
正規表示式優先順序如下:
優先順序符號
最高\
高()
、(?:)
、(?=)
、
中*
、+
、?
、、
、
低^
、$
、中介字元
次最低串接
(即相鄰字元連線在一起)
最低|
正規表示式
等價說明
[abc]
a|b|c
匹配列出的任意字元。示例匹配字元 『a』 或 『b』 或 『c』。
[^abc]
匹配未列出的任意字元。示例匹配字元 『a』、『b』、『c』 以外的任意字元。
[a-z]
匹配指定範圍內的任意字元。示例匹配字元 『a』 到 『z』 範圍內的任意小寫字母字元。
[^a-z]
匹配任何不在指定範圍內的任意字元。 示例匹配字元 『a』 到 『z』 範圍之外的任意字元。
[a-za-z]
匹配指定範圍內的任意字元。範圍組合。示例匹配字元 『a』 到 『z』 範圍內的任意小寫字母字元 和 『a』 到 『z』 範圍內的任意大寫字母字元。
.
[^\r\n]
匹配除 「\r」 「\n」 之外的任何單個字元。要匹配包括 「\r」「\n」 在內的任何字元,請使用像 「(.
(...)
匹配滿足條件的子串,如(zone)
能夠匹配this is test zone, 1zone, zoneee, zona.
3個完整 「zone」 的位置。
(aa|bb)
匹配滿足條件的子串。示例匹配子串 『aa』 或 『bb』
a?
非貪心匹配。只匹配滿足條件的,長度最小的串。如[0-9]+
是匹配 1−∞
1 - \infty
1−∞ 個阿拉伯數字,但是[0-9]+?
則匹配滿足[0-9]+
的最小串。
a*
匹配前面的子表示式零次或多次。示例匹配 0−∞
0 - \infty
0−∞ 個 『a』
a+
匹配前面的子表示式一次或多次。示例匹配 1−∞
1 - \infty
1−∞ 個 『a』
a
aaa
匹配確定的 3 次。示例匹配 『aaa』
a
aaa|aaaa|aaaaa|...
匹配確定的 3−∞
3 - \infty
3−∞ 次。示例匹配 『aaa』, 『aaaa』, 『aaaaa』, …
a
aaa|aaaa|aaaaa|aaaaaa
匹配確定的 3−6
3 - 6
3−6 次。示例匹配 『aaa』, 『aaaa』, 『aaaaa』, 『aaaaaa』
^
匹配輸入字串的開始位置。
$
匹配輸入字串的結束位置。
部分符號有特殊的意義,需要使用\
進行轉義
特殊符號
等價說明
\b
匹配乙個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」 可以匹配 「never」 中的 「er」,但不能匹配 「verb」 中的 「er」。
\b
匹配非單詞邊界。「er\b」 能匹配 「verb」 中的 「er」,但不能匹配 「never」 中的 「er」。
\cx
匹配由 x 指明的控制字元。x 的值必須為 a-z 或 a-z 之一。否則,將 c 視為乙個原義的 「c」 字元。控制字元的值等於 x 的值最低 5 位元(即對 3210 進製的餘數)。例如,\cm 匹配乙個 control-m 或回車符。\ca 等效於 \u0001, \cb 等效於 \u0002, 等等…
\d
[0-9]
匹配乙個數字字元。注意 unicode 正規表示式會匹配全形數字字元。
\d
[^0-9]
匹配乙個非數字字元。
\f
\x0c
或\cl
匹配乙個換頁符。
\n
\x0a
或\cj
匹配乙個換行符。
\r
\x0d
或\cm
匹配乙個回車符。
\s
[\f\n\r\t\v]
匹配任何空白字元,包括空格、製表符、換頁符等等。注意 unicode 正規表示式會匹配全形空格符。
\s
[^ \f\n\r\t\v]
匹配任何非空白字元。
\t
\x09
或\ci
匹配乙個製表符。
\v
\x0b
或\ck
匹配乙個垂直製表符。
\w
[a-za-z0-9_]
匹配包括下劃線的任何單詞字元。注意 unicode 正規表示式會匹配中文字元。
\w
[^a-za-z0-9_]
匹配任何非單詞字元。
\xnn
十六進製制轉義字元序列。匹配兩個十六進製制數字 nn 表示的字元。例如,"\x41" 匹配 「a」。"\x041" 則等價於 「\x04&1」。正規表示式中可以使用 ascii 編碼。
\num
向後引用(back-reference)乙個子字串(substring),該子字串與正規表示式的第 num 個用括號圍起來的捕捉群(capture group)子表示式(subexpression)匹配。其中 num 是從 1 開始的十進位制正整數,其上限可能是 9、31、99 甚至無限。例如:"(.)\1" 匹配兩個連續的相同字元。
\n
標識乙個八進位制轉義值或乙個向後引用。如果 \n 之前至少 n 個獲取的子表示式,則 n 為向後引用。否則,如果 n 為八進位制數字(0-7),則 n 為乙個八進位制轉義值。
\nm
3 位八進位制數字,標識乙個八進位制轉義值或乙個向後引用。如果 \nm 之前至少有 nm 個獲得子表示式,則 nm 為向後引用。如果 \nm 之前至少有 n 個獲取,則 n 為乙個後跟文字 m 的向後引用。如果前面的條件都不滿足,若 n 和 m 均為八進位制數字(0-7),則 \nm 將匹配八進位制轉義值 nm。
\nml
如果 n 為八進位制數字(0-3),且 m 和 l 均為八進位制數字(0-7),則匹配八進位制轉義值 nml。
\un
\0
匹配 null 字元。ascii 為 0x00。注意 unicode 正規表示式會匹配 \u2400 字元。
正規表示式 正規表示式 總結
非負整數 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...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...
Linux正規表示式 編寫正規表示式
為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...