目錄 | The Elements of Regular Expression

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) 的麻煩. 如此, 才能真正發揮各工具的的功能, 減輕資料處理時的負 擔, 並增加資料處理的效率.


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


目錄 | The Elements of Regular Expression