Regular Expression 簡介(一)


(轉載自http://phi.sinica.edu.tw/aspac/reports/94/94019/)
中央研究院計算中心ASPAC計劃

Why Regular Expression?

Regular Expression 是一種字串表達的方式。

使用者可使用一個簡短的 Regular Expression 來表示 “具有某特徵” 或者 “複雜難以描述” 的所有字串。而日常資料處理中,最常進行的工作是『從檔案中找出具有某特徵的字串,再加以處理(列印,置換,計算…)』。此時,Regular Expression 便可派上用場。

使用一個簡短的 Regular Expression 便可完全指定需要加以處理的資料 ,避免反覆判斷找尋的困擾。譬如 :
若使用 MS-DOS 中文字編輯器 edit 的找尋功能,可來 找出檔案中所有的 “prg1.c”; 但 edit 卻無法一次同 時找尋字串”prg1.c”、”prg2.c” …或 “prg8.c”; 必需反覆執行八次找尋的動作。

在 UNIX 中的 vi ,使用一個 Regular Expression ” prg[0-8]\.c” 便可同時表示上述八個字串,如此一次就可找出指定的所有字串。
可見 Regular Expression 確實十分便利。然而,MS-DOS 下許多工具的設計並不支援解讀 Regular Expression。但 UNIX 環境下除了 vi 外,還有許多工具都接受 Regular Expression,如 : grep、sed、awk、csplit… 。使用這些工具時,便可應用 Regular Expression 來指定欲找尋的字串; 並可配合這些工具的其它功能將找尋到的資料進一步地加以處理。

Regular Expression 的特色是簡短且表達力強。它所表達的可以是某一特定的字串,也可以是具有某一共同特徵的”所有”字串(如上例)。
Regular Expression 中定義了一組特殊字元,它們代表著某些特別的意義;使用者可藉這些特殊字元來表示字串的下列特徵:
1. 描述組成字串的元素(components)–例 如:Regular Expression “[Tt]he” 代表字串 “The” 或 “the”。
2. 限制字串出現的位置–例 如:Regular Expression “^The” 代表『出現於行首』的字串 “The”。

由於 Regular Expression 具有極佳的字串表示能力。往後,讀者若能多利用 UNIX 上接受 Regular Expression 的工具,且靈活應用 Regular Expression;則可避免撰寫程式進行複雜字串判斷(parsing) 的麻煩。如此,才能真正發揮各工具的的功能,減輕資料處理時的負擔,並增加資料處理的效率。

下次我們將介紹組成Regular Expression 的元素。


Note 1
UNIX中定義了數種字串表達方式,Regular Expression 及 Extended Regular Expression 是常見的二種。另一種是使用於Shell命令列,將參數展開}(expand)成檔案名稱的 “Pattern Matching Notation”,這種表示法與 Regular Expressions 的語法差異較大,甚至有數項用法相左,故位未列入本文討論以免讀者混淆。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *