各類語言工具正則表達式語法比較

 

各類語言工具正則表達式語法比較

  grep 2.5.1 egrep 2.5.1 sed 3.02
sed 4.07
awk 3.1.1 perl 5.8.0 vim 6.1 JavaScript
轉義 \ \ \ \ \ \ \
行頭 ^ ^ ^ ^ ^ ^ ^
行尾 $ $ $ $ $ $ $
n個 {n} {m,n} {m,} {,n} \{n\} {n} \{n\} {n}或\{n\} 僅定義 --posix 或 --re-interval有效(要表達}和{,得用\\{和\\} 沒有定義--posix或--re-interval時,不能用{n}的語法, \}\{和}{同義 {n} \{n\} {n}

{0,}html

 

* * * *或\*, (要表達*,得用\\*) * * *

{1,}git

 

\+ + \+ +或\+, (要表達+, 得用\\+) + \+ +

{0,1}正則表達式

 

\? ? \? ?或\?, (要表達?, 得用\\?) ? \? ?
任意字符 . . . . 含\n. . /s修飾後則含\n . 除\n . 除\n
(pat) 匹配並獲結果 patpat (pat) patpat (pat)或patpat (要表達括號,用\\( \\) ) (pat) patpat (pat)
(?:pat) 匹配但不獲結果         (?:pat) 不支持 (?:pat)
(?=pat) 等於預查         (?=pat) 不支持 (?=pat)
(?!pat) 不等預查         (?!pat) 不支持 (?!pat)
| 或 \| | \| |或\| (要表達|,得用\\|) | \| |
其中任意字符 [xyz] [xyz] [xyz] [xyz] [xyz] [xyz] [xyz]
[.ch.] [=ch=]     [.ch.]        
單詞邊界 \b \b \b \b   \b   \b
非單詞邊界 \B \B \B \B   \B   \B
單詞左右邊界 <> \< \> \< \> \< \> 不支持 (><和\>\<和\\>\\<同義 不支持(><和\>\<同義 \< \> 不支持(><和\>\<同義
控制字符 /cx     \cx   \cx   \cx
數字\d         \d \d \d
非數字\D         \D \D \D
換頁 \f     高版本支持 \f \f 另義 \f表示文件名字符 \f
換行 \n       \n \n \n \n
回車 \r     \r \r \r \r \r
空白 \s         \s \s \s
非空白 \S         \S \S \S
製表符 \t     高版本支持 \t \t \t \t
垂直製表符 \v     高版本支持 \v \v 另義 \v表示very magic \v
單詞字符 \w [A-Za-z0-9_] \w \w \w   \w \w \w
非單詞字符 \W [^A-Za-z0-9] \W \W \W   \W \W \W
\xn 16進制     高版本支持 \xn \xn 另義 \x表示[0-9A-Za-z] \xn
\n 八進制       \n \n   \n
\n 後向引用 \n \n \n \n 僅取結果可用 \n \n 僅取結果可用 \n
[:alnum:] 字母和數字 [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:]  
[:alpha:] 字母 [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:]  
[:cntrl:] 控制字符 [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:]  
[:digit:] 數字 [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] [:digit:]  
[:graph:] 可打印字符(不含空格) [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] [:graph:]  
[:lower:] 小寫 [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] [:lower:]  
[:print:] 可打印字符(含空格) [:print:] [:print:] [:print:] [:print:] [:print:] [:print:]  
[:punct:] 標點 [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] [:punct:]  
[:space:] 空格 [:space:] [:space:] [:space:] [:space:] [:space:] [:space:]  
[:upper:] 大寫字母 [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] [:upper:]  
[:xdigit:] 16進制數字 [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:]  
[:return:]           [:return:]  
[:tab:]           [:tab:]  
[:escape:]           [:escape:]  
[:backspace:]           [:backspace:]  

 

 

表達式全集

字符 描述
\ 將下一個字符標記爲一個特殊字符、或一個原義字符、或一個向後引用、或一個八進制轉義符。例如,「n」匹配字符「n」。「\n」匹配一個換行符。串行「\\」匹配「\」而「\(」則匹配「(」。
^ 匹配輸入字符串的開始位置。若是設置了RegExp對象的Multiline屬性,^也匹配「\n」或「\r」以後的位置。
$ 匹配輸入字符串的結束位置。若是設置了RegExp對象的Multiline屬性,$也匹配「\n」或「\r」以前的位置。
* 匹配前面的子表達式零次或屢次。例如,zo*能匹配「z」以及「zoo」。*等價於{0,}。
+ 匹配前面的子表達式一次或屢次。例如,「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」。+等價於{1,}。
? 匹配前面的子表達式零次或一次。例如,「do(es)?」能夠匹配「does」或「does」中的「do」。?等價於{0,1}。
{n} n是一個非負整數。匹配肯定的n次。例如,「o{2}」不能匹配「Bob」中的「o」,可是能匹配「food」中的兩個o。
{n,} n是一個非負整數。至少匹配n次。例如,「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的全部o。「o{1,}」等價於「o+」。「o{0,}」則等價於「o*」。
{n,m} m和n均爲非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,「o{1,3}」將匹配「fooooood」中的前三個o。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。
? 當該字符緊跟在任何一個其餘限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘量少的匹配所搜索的字符串,而默認的貪婪模式則儘量多的匹配所搜索的字符串。例如,對於字符串「oooo」,「o+?」將匹配單個「o」,而「o+」將匹配全部「o」。
. 匹配除「\n」以外的任何單個字符。要匹配包括「\n」在內的任何字符,請使用像「(.|\n)」的模式。
(pattern) 匹配pattern並獲取這一匹配。所獲取的匹配能夠從產生的Matches集合獲得,在VBScript中使用SubMatches集合,在JScript中則使用$0…$9屬性。要匹配圓括號字符,請使用「\(」或「\)」。
(?:pattern) 匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供之後使用。這在使用或字符「(|)」來組合一個模式的各個部分是頗有用。例如「industr(?:y|ies)」就是一個比「industry|industries」更簡略的表達式。
(?=pattern) 正向確定預查,在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如,「Windows(?=95|98|NT|2000)」能匹配「Windows2000」中的「Windows」,但不能匹配「Windows3.1」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始。
(?!pattern) 正向否認預查,在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不須要獲取供之後使用。例如「Windows(?!95|98|NT|2000)」能匹配「Windows3.1」中的「Windows」,但不能匹配「Windows2000」中的「Windows」。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配以後當即開始下一次匹配的搜索,而不是從包含預查的字符以後開始
(?<=pattern) 反向確定預查,與正向確定預查類擬,只是方向相反。例如,「(?<=95|98|NT|2000)Windows」能匹配「2000Windows」中的「Windows」,但不能匹配「3.1Windows」中的「Windows」。
(?<!pattern) 反向否認預查,與正向否認預查類擬,只是方向相反。例如「(?<!95|98|NT|2000)Windows」能匹配「3.1Windows」中的「Windows」,但不能匹配「2000Windows」中的「Windows」。
x|y 匹配x或y。例如,「z|food」能匹配「z」或「food」。「(z|f)ood」則匹配「zood」或「food」。
[xyz] 字符集合。匹配所包含的任意一個字符。例如,「[abc]」能夠匹配「plain」中的「a」。
[^xyz] 負值字符集合。匹配未包含的任意字符。例如,「[^abc]」能夠匹配「plain」中的「p」。
[a-z] 字符範圍。匹配指定範圍內的任意字符。例如,「[a-z]」能夠匹配「a」到「z」範圍內的任意小寫字母字符。
[^a-z] 負值字符範圍。匹配任何不在指定範圍內的任意字符。例如,「[^a-z]」能夠匹配任何不在「a」到「z」範圍內的任意字符。
\b 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如,「er\b」能夠匹配「never」中的「er」,但不能匹配「verb」中的「er」。
\B 匹配非單詞邊界。「er\B」能匹配「verb」中的「er」,但不能匹配「never」中的「er」。
\cx 匹配由x指明的控制字符。例如,\cM匹配一個Control-M或回車符。x的值必須爲A-Z或a-z之一。不然,將c視爲一個原義的「c」字符。
\d 匹配一個數字字符。等價於[0-9]。
\D 匹配一個非數字字符。等價於[^0-9]。
\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。
\w 匹配包括下劃線的任何單詞字符。等價於「[A-Za-z0-9_]」。
\W 匹配任何非單詞字符。等價於「[^A-Za-z0-9_]」。
\xn 匹配n,其中n爲十六進制轉義值。十六進制轉義值必須爲肯定的兩個數字長。例如,「\x41」匹配「A」。「\x041」則等價於「\x04&1」。正則表達式中可使用ASCII編碼。.
\num 匹配num,其中num是一個正整數。對所獲取的匹配的引用。例如,「(.)\1」匹配兩個連續的相同字符。
\n 標識一個八進制轉義值或一個向後引用。若是\n以前至少n個獲取的子表達式,則n爲向後引用。不然,若是n爲八進制數字(0-7),則n爲一個八進制轉義值。
\nm 標識一個八進制轉義值或一個向後引用。若是\nm以前至少有nm個得到子表達式,則nm爲向後引用。若是\nm以前至少有n個獲取,則n爲一個後跟文字m的向後引用。若是前面的條件都不知足,若n和m均爲八進制數字(0-7),則\nm將匹配八進制轉義值nm。
\nml 若是n爲八進制數字(0-3),且m和l均爲八進制數字(0-7),則匹配八進制轉義值nml。
\un 匹配n,其中n是一個用四個十六進制數字表示的Unicode字符。例如,\u00A9匹配版權符號(©)。

經常使用正則表達式

用戶名 /^[a-z0-9_-]{3,16}$/
密碼 /^[a-z0-9_-]{6,18}$/
十六進制值 /^#?([a-f0-9]{6}|[a-f0-9]{3})$/
電子郵箱 /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/
URL /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
IP 地址 /((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
HTML 標籤 /^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
刪除代碼\\註釋 (?<!http:|\S)//.*$
Unicode編碼中的漢字範圍 /^[\u2E80-\u9FFF]+$/
相關文章
相關標籤/搜索