1. 程式人生 > >第7章 sed、gawk介紹與正則表示式-----------(擴充套件的正則表示式)

第7章 sed、gawk介紹與正則表示式-----------(擴充套件的正則表示式)

7.6 擴充套件的正則表示式

         POSIXERE模式包括某些Linux應用程式和工作使用的其他符號。gawk程式能夠識別ERE模式,但是sed編輯器。sed編輯器和gawk程式的正則表示式引擎存在差異。gawk程式可以使用大部分擴充套件正則表示式模式的符號,並且具有sed編輯器沒有的其他一些篩選能力。由於這一點,gawk處理資料流的速度通常較慢。

7.6.1 問號

         問號(?)表示其前面的字元可以不出現或出現一次,它不匹配重複出現的字元。

        

         上圖例項:如果o不出現在文中,或者僅在文字中出現一次,則模式匹配。

         問號可以與字元類連用:

        

         上述例項:如果該字元類中字元沒有出現或者其中一個字元出現,模式匹配通過。然而,如果兩個字元同時出現,或者一個字元出現兩次,則模式匹配失敗。

7.6.2 加號

         加號(+)表示其前面的字元可以出現一次或多次,但必須出現至少一次。如果該字元不存在,則模式不匹配。

         加號也適用與字元類,與星號和問號的作用方式相同。

        

         如果字元類中定義的任一字元出現,該文字就與指定的模式匹配。如果不使用字元類,如果字元a或o字元不存在,模式匹配失敗。

7.6.3 適用大括號

         在ERE中可以使用大括號指定對可重複的正則表示式的限制。通常稱為間隔(interval)。可以用兩種格式表示間隔:

m:該正則表示式正好出現m次

m,n:該正則表示式出現最少m次,最多n次

         這一功能允許調整某一字元或字元類在模式中出現的精確次數。預設情況下,gawk程式不能識別正則表示式間隔。必須指定--re-interval命令列選項,以便gawk程式識別正則表示式間隔

         操作例項如下:

        

         通過指定間隔1,可以將該字元在要匹配模式的字串中存在的次數限定為1。如果該字元出現多次,則該模式匹配失敗。

         需要指定上下限時,大括號可以派上用場。上圖所示的例子中:如果o可以出現一次或兩次,模式匹配通過;否則模式匹配失敗。

         間隔字元也適用與字元類,如果在此文字模式中正好有一個或兩個o,則此正則表示式模式匹配,但如果存在更多的任意組合,模式匹配就會失敗。

7.6.4 管道符號

         管道符號允許用邏輯OR公式指定正則表示式檢查資料流時使用的兩個或多個模式。如果任何一個模式與資料流文字匹配,該文字通過。如果沒有一個模式匹配,資料流文字失敗。     

   

         正則表示式和管道符號之間不能有任何空格,否則將空格新增到正則表示式模式中。管道符號兩個的任何正則表示式都可以使用任意正則表示式模式來定義文字。

7.6.5 將表示式分組

         正則表示式模式可以使用圓括號分組。在將正則表示式模式分組時,一個組合將作為一個標準字元處理。可以像特殊字元應用於正常字元一樣,將特殊字元應用於組合。

        

         將分組和管道符號結合使用以建立可能的模式匹配組是很常見的組合。