在使用正則表達式的過程中,大家可能會注意到不同的工具裏邊正則表達式的語法貌似有些不一樣,不同的語言支持的正則表達式語法也會有一些不同,其實出現這些情況的根本原因就是存在幾大流派,它們之間存在一些差別。
一、流派介紹
正則表達式簡單來說有三大流派:PCRE、BRE、ERE
PCRE(Perl Compatible Regular Expression):可以說是正則表達式的老前輩,它是從Perl衍生出來的一個顯赫流派,\d \w \s 等表示法就是它的特徵;
BRE(Basic Regular Expression):POSIX規範的正則表達式之一,grep、vi、sed都屬於這一派,它顯著的特徵就是( ) { } 這幾個括號元字符必須經過轉義才具有特殊含義,不支持 + ? | 等元字符,隨着時間發展,後來又出現了GNU BRE,GNU BRE支持上邊這些字符,但是也必須都經過轉義纔能有特殊含義;
ERE(Extended Regular Express):也是POSIX規範的正則表達式之一,egrep awk都屬於這一派,( ) { }+ ? |等元字符可以直接使用不需要轉義,這個流派後來也出現了GNU ERE,在之前的基礎上添加了支持\1 \2等。
二、各語言及工具支持情況介紹
下邊的表格顯示了Linux下常見工具的正則表達式表示法對比:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Java、perl、js、vb、php等語言中也提供正則表達式相關的模塊,他們具體採用的那種流派還未具體去調查,可以再進一步研究一下。