磨練構建正規表示式模式的技能(轉)

amyz發表於2007-08-10
磨練構建正規表示式模式的技能(轉)[@more@]

  透過本文的學習,您可以增加一些有用的設計實際正規表示式 (regexp) 的技能。構建正規表示式是任何管理員日常工作中的一部分。為了構造返回所需條件的成功正規表示式,需要學習以模式匹配的角度進行思考,而這種技能需要花大量的時間進行練習。

  引言

  UNIX® 管理員每天都需要構建和使用正規表示式 (regexp) 進行文字模式匹配。大多數語言都支援正規表示式的某種實現。有的應用程式(如 EMACS)具有正規表示式搜尋功能,並且您可以透過各種命令列工具使用正規表示式。無論什麼應用程式,構建正確的正規表示式的關鍵之處在於,識別僅滿足需要匹配的資料的模式,以便在輸入中排除其他不必要的內容。

  出於這個目的,本文將逐步介紹幾種正規表示式模式構建技巧,並介紹它們如何幫助您完成各種常規任務。

  使用正規表示式 (regexp)

  除非特別說明,否則本文中使用的示例都是擴充套件可移植作業系統介面(擴充套件 POSIX)的正規表示式。如果透過命令列(如使用 egrep 實用工具)使用它們,您應該根據需要引用各種正規表示式。請記住,不同的正規表示式實現之間存在一些區別,您可能不得不適應所使用的特定的工具、應用程式或語言中的具體實現。

  匹配整行內容

  ^ 元字元匹配行首,而 $ 匹配行尾,如果將它們組合在一起(如 ^$),它們將匹配空行。(這個表示式的映象,即 $^,是不可能匹配成功的,它將永遠 都無法匹配到有效行。)這個基本的正規表示式是許多複雜正規表示式的基礎,如果您還不習慣使用這個基本的正規表示式,那麼您應該逐步養成使用它的習慣。使用它來構建匹配整行內容 的模式。

  在使用者字典檔案 (/usr/dict/words) 中搜尋是一個很好的基本模式。(有些版本的 UNIX 將使用者字典放在 /usr/share/dict/words 中。)

  例如,假設您忘記了如何拼寫單詞 fuchsia。其中是否包含 sh 或 cs 呢?您所知道的只是,它以 fu 開頭並以 ia 結尾。

  嘗試使用這個模式進行搜尋:

  $ egrep -i '^fu.*ia$' /usr/dict/words

  -i 標誌表示在搜尋過程中不區分大小寫。在這個示例中,因為 fuchsia 拼寫正確,所以在返回的單詞中包括這個單詞。

  根據長度匹配行

  使用大括號元字元 ({ }) 指定前面的正規表示式匹配多少次,如表 1 所示。當您將它們新增到剛才介紹的整行搜尋中時,您可以指定行的長度。

  表 1. 大括號元字元的含義

  示例描述

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-941666/,如需轉載,請註明出處,否則將追究法律責任。

相關文章