grep、sed、awk、perl等對正則表達式的支持的差別
在各種常用的工具中,
正則表達式如此的相似卻又不同。
下表列出了一些常用的正則表達式,以及其不同之處。
項目總多,遺漏必有不少,請各位看官不吝指出。
以perl的正則為基準,不同的用法以粉紅色標出。
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,} | * | * | * | *或\*, (要表達*,得用\\*) | * | * | * | |||||||||||||||||||||||||
{1,} | \+ | + | \+ | +或\+, (要表達+, 得用\\+) | + | \+ | + | |||||||||||||||||||||||||
{0,1} | \? | ? | \? | ?或\?, (要表達?, 得用\\?) | ? | \? | ? | |||||||||||||||||||||||||
任意字符 | . | . | . | . 含\n. | . /s修飾后則含\n | . 除\n | . 除\n | |||||||||||||||||||||||||
(pat) 匹配并獲結果 | \(pat\) | (pat) | \(pat\) | (pat)或\(pat\) (要表達括號,用\\( \\) ) | (pat) | \(pat\) | (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:] | 不支持 | </tr> </tbody> </table>