目錄 | 組成 Regular Expression 的元素 | 範 例


使用 Regular Expression 時的注意事項

學習 Regular Expression 除了應瞭解其中特殊字元所代表的意義外; 在實際應用時, 也有一些應該注意的事項. 倘若忽略了這些特點, 往往會 造成字串無法正確比對, 而導至結果錯誤. 本節除了介紹這些應予留心的事 項外, 也提供各軟體在解讀 Regular Expression, 進行字串比對時所依據的 二項重要原則.

  1. 接受 Regular Expression 的指令或工具, 它們找尋字串時係按照下列二原則:

    1. 由左往右進行字串找尋.
    2. 盡可能尋找最長且合於所指定 Regular Expression 的字串.
      • 例如 : 應用 Regexp `` a.*b''(代表以"a"開頭以"b"結尾 的任意字串),於資料列 ``12 3ab0aab4 56'' 中找尋合於該條件 的字串.

        該資料列中合於 Regexp `` a.*b'' 的字串有 ``ab'', ``aab'', ``ab0aab''. 但按上列二原則「由左往右找, 且盡可能尋 找最長的字串」 實際上被找到的字串將為 ``ab0aab''.

  2. Regular Expression 有許多不同的版本 UNIX 中不同的指令對同一個 Regular Expression 可能會有不同的解釋. 原因是這些指令無法完全解釋前節所述 Regular Expression 中所有的特殊 字元. 這就是所謂 "Regular Expression 有許多不同的版本"

    Appendix A 附表 中列出 UNIX 中常用的指令及它所接受的 Regular Expression 特殊字元.

  3. 勿將Shell上所使用的字串表示法(Pattern Matching Notation) 與 Regular Expression 混淆.
    Regexp `` a*'' 用以表示一個完全由字元 "a" 所組成的任意長度字串. 但在 Shell 命令列上執行 ``ls a*'', 卻會列出目前工作目錄下所有以 "a" 開頭的檔案與子目錄.兩者對 ``a*'' 的解釋並不相同. 因為 Shell 所接受的是另一種名為 ``Pattern Matching Notation'' 的表示法, 兩者並不相同請勿混淆.

  4. 在含有中文之文字檔中, 使用 Regular Expression 進行字串找尋時, 可能會發生錯誤.
  5. 並非所有軟體都接受 Regular Expression(有解讀 Regular Expression 的能力). 一般而言,就算某軟體(工具)可接受 Regular Expression , 它也並非把所有的字 串或參數當成 Regular Expression 解釋. 讀者使用 Regular Expression 時, 應先確定該軟體會把該些字串當成 Regular Expression 解釋(可翻查其 manual page), 如此才可獲得正確的結果.


目錄 | 組成 Regular Expression 的元素 | 範 例