基本及擴展的正則表達式

正則表達式元字符集有兩種版本:基本的和擴展的。正則表達式grep使用的是其元字符集的基本集.egrep或者grep -E 用的是正則表達式元字符集的擴展集。Gnu grep 同時使用這兩個集。基本集包括:^ , $ , . , * ,[] ,[^] ,\<, and ,\>

   另外,Gnu 將\b,\w 和\W 作爲POSIX新增的正則表達式元字符予以識別。-E 選項使得Gnu grep 能夠使用擴展集。即使在沒有—E選項的情況下,標準的grep在默認情況下也支持以反斜槓開頭的擴展正則表達式元字符集。例如:?,+ ,{}, | ,( )

  前面沒有反斜槓的擴展元字符集對於標準的grep沒有特別的含義。

     \ ? , \ + ,\{ , \ | ,\(,  \ )

 Gnu grep 的使用格式參見表、

                Gnu grep

格式 含義

grep 'patten' filename(s)

grep -G 'pattern' filename(s)

grep -E 'pattern' filebname(s)

grep -F 'pattern' filename(s)

基本正則表達式元字符(默認)

同上   (默認)

擴展正則表達式元字符集

無正則表達式元字符集

表3.2 grep 的正則表達式元字符(基本集)

元字符 功能 例子 匹配什麼
^ 錨定行的開始 ^love 匹配所有以love開頭的行
$ 錨定行的結束 love$ 匹配所有以love線束的行
 .  匹配一個字符  l..e  匹配所有這樣的行,這些行包含這樣的字符,第一個字符是l,緊跟着兩個字符,然後是e
 *  代表0個或者多個先前字符  *love  匹配所有這樣的行,有0個或者多個空格,空格後面跟着love
 []  匹配字符組中的一個字符  [LI]ove  匹配所有包含love或者love的行
 [^]  匹配一個不在範圍內的字符  [^A-Z]ove 匹配所有這樣的行,這些行包含如下的字符,第一個字符不是從A~Z中間的一個,後面跟着ove 
 /<a  錨定單詞的開始 /<love  匹配所有這樣的行,這些行包含以love開頭的單詞(vi和grep支持這個功能); 
 \> 錨定單詞的結束  love\>   匹配所有這樣的行,這些行包含以love結束的單詞(vi和grep支持這個功能)
 \(.\)b  標記後面用到的匹配字符 \(love\)able   最多可以使用9個標籤,第一個標籤是模板最左邊的部分。在本例子中,模板love保存爲標籤l,後面的\l指的就是Love;本例子搜索的是這樣的行,這些行包含這樣的字符,在Loveable後面跟着lovers
 x\{m\} m次複製字符x   o\{5,10\} 匹配所有這樣的行,包含的o的數量在5-10 個之間,(vi和grep支持這個功能)
 x\(m\) 至少m次複製字符x   o\{5,\}  
 x\{m,n\}c  至少m次,至多n次複製字符x  o\{5,10\}  
 \w  文字和數字字符,[A-Za-z0-9]  L\w*e  匹配一個l字符,緊跟着0個或者多個文字或數字字符,然後是e
 \W  同上 love\W+  匹配love後面是一個或者多個非單詞字符,如點號或者問號 
 \b  單詞分界線  \blove\b  僅僅匹配單詞love

 a.這些元字符必須與反斜線一起才能工作,在grep-E和Gnu egrep中也是這樣;他們在UNIX下的egrep中完全不能用。

b.這些元字符是擴展集的一部分,它們可以在UNIX下的grep和Gnu的常規grep下正常工作。如果加反斜線,在UNIX下的egrep中就不能正常工作。

c.該元字符不能被所有版本的UNIX和模板匹配實用程序支持:它們通常在vi或grep下工作,它們根本不能在UNIX的egrep下工作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章