非打印字符 | 說明 |
---|---|
\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 |
[xyz] | 字符集合。匹配所包含的任意一個字符。例如,「[abc]」能夠匹配「plain」中的「a」 |
[^xyz] | 負值字符集合。匹配未包含的任意字符。例如,「[^abc]」能夠匹配「plain」中的「plin」 |
[a-z] | 字符範圍。匹配指定範圍內的任意字符。例如,「[a-z]」能夠匹配「a」到「z」範圍內的任意小寫字母字符。注意:只有連字符在字符組內部時,而且出如今兩個字符之間時,才能表示字符的範圍; 若是出字符組的開頭,則只能表示連字符自己 |
[^a-z] | 負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,「[^a-z]」能夠匹配任何不在「a」到「z」範圍內的任意字符 |
\b | 匹配一個單詞邊界,也就是指單詞和空格間的位置。簡單講就是行開頭/結尾/與空格相鄰 |
\B | 匹配非單詞邊界。「\Ber」能匹配「verb」中的「er」,但不能匹配「never」中的「er」 |
\cx | 匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一。不然,將c視爲一個原義的「c」字符 |
\d | 匹配一個數字字符。等價於[0-9]。grep 要加上-P,perl正則支持 |
\D | 匹配一個非數字字符。等價於[^0-9]。grep要加上-P,perl正則支持 |
\w | 匹配包括下劃線的任何單詞字符。相似但不等價於「[A-Za-z0-9_]」,這裏的"單詞"字符使用Unicode字符集 |
\W | 匹配任何非單詞字符。等價於[^A-Za-z0-9_] |
特殊字符 | 說明 |
---|---|
$ | 匹配輸入字符串的結尾位置。若是設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r' |
( ) | left-aligned 子表達式。子表達式能夠獲取供之後使用 |
* | 匹配前面的子表達式零次或屢次 |
+ | 匹配前面的子表達式一次或屢次 |
. | 匹配除換行符\n以外的任何單字符 |
[ | 標記一箇中括號表達式的開始 |
? | 匹配前面的子表達式零次或一次,或【指明一個非貪婪限定符】 |
\ | 將下一個字符標記爲或特殊字符、或原義字符、或向後引用、或八進制轉義符。例如, 'n' 匹配字符 'n'。'\n' 匹配換行符。序列 '\' 匹配 "",而 '(' 則匹配 "(" |
^ | 匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。要匹配 ^ 字符自己,請使用 ^ |
{ | 標記限定符表達式的開始 |
| | 指明兩項之間的一個選擇 |
限定符 | 說明 |
---|---|
* | 等價於{0,} |
+ | 等價於{1,} |
? | 等價於{0,1} |
{n} | n非負整數。匹配肯定的n次 |
{n,} | n非負整數。至少匹配n次 |
{n,m} | m和n均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次。請注意在逗號和兩個數之間不能有空格 |
限定符 | 說明 |
---|---|
^ | 匹配輸入字符串開始的位置。若是設置了 RegExp 對象的 Multiline 屬性,^ 還會與 \n 或 \r 以後的位置匹配。 |
$ | 匹配輸入字符串結尾的位置。若是設置了 RegExp 對象的 Multiline 屬性,$ 還會與 \n 或 \r 以前的位置匹配。 |
\b | 匹配一個字邊界,即字與空格間的位置。 |
\B | 非字邊界匹配。 |
選擇 | 用圓括號將全部選擇項括起來,相鄰的選擇項之間用|分隔。但用圓括號會有一個反作用,使相關的匹配會被緩存,此時可用?:放在第一個選項前來消除這種反作用。 |
---|---|
?: | 非捕獲元之一 |
?= | 非捕獲元之一,正向預查,在任何開始匹配圓括號內的正則表達式模式的位置來匹配搜索字符串 |
?! | 非捕獲元之一,負向預查,在任何開始不匹配該正則表達式模式的位置來匹配搜索字符串。 |
對一個正則表達式模式或部分模式兩邊添加圓括號將致使相關匹配存儲到一個臨時緩衝區中,所捕獲的每一個子匹配都按照在正則表達式模式中從左到右出現的順序存儲。緩衝區編號從 1 開始,最多可存儲 99 個捕獲的子表達式。每一個緩衝區均可以使用 \n 訪問,其中 n 爲一個標識特定緩衝區的一位或兩位十進制數。
可使用非捕獲元字符 ?:、?= 或 ?! 來重寫捕獲,忽略對相關匹配的保存。
反向引用的最簡單的、最有用的應用之一,是提供查找文本中兩個相同的相鄰單詞的匹配項的能力。如下面的句子爲例:
例子:Is is the cost of of gasoline going up up
正則:\b([a-z]+) \1\b
結果:
Is is
of of
up uplinux
需求: 將
2018年9月20日
替換爲
2018-9-20
查找正則:(\d{4})(年)(\d)(月)(\d{1,2})(日)
替換爲: \1-\3-\5正則表達式
[\u4e00-\u9fa5]
json
((([1-9][0-9]{5})([0-9]{2})((((0[13578])|(10)|(12))((0[1-9])|([12][0-9])|(3[0-1])))|(((0[469])|(11))((0[1-9])|([12][0-9])|(30)))|((02)((0[1-9])|([12][0-9]))))([0-9]{3}))|(([1-9][0-9]{5})([12][0-9]{3})((((0[13578])|(10)|(12))((0[1-9])|([12][0-9])|(3[0-1])))|(((0[469])|(11))((0[1-9])|([12][0-9])|(30)))|((02)((0[1-9])|([12][0-9]))))([0-9]{3})([0-9Xx])))
緩存
(\b(\d{3,4}\d{7,8})\D)|(\d{3,4}\-\d{7,8})
工具
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
測試
[a-zA-z]+://[^\s]*
.net
匹配格式:123456
\b[1-9]\d{5}(?!\d)
nuxt
匹配格式:2018-06-19
([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))
code
^(\s*)\r\n
\r\n