正規表示式簡介

正規表示式(regular expression,常簡寫作RegExp或regex,尚有「規則運算式」、「正則表達式」等多種譯法)是一種定義文字比對規則的語言,可用於尋找、取代文字。正規表示式應用極為廣泛,大多數程式語言都支援用正規表示式做文字操作,許多應用程式也可以使用,且幾乎不可能被淘汰,是非常值得投資學習的工具

正規表示式的參考資源極多,以下提供一些通用基本觀念,以便沒有寫程式經驗的朋友瞭解一些簡單但威力無窮的應用方式,及實際用於資料檢索。文末也提供一些參考資源,供有興趣的朋友深入鑽研。

語法簡介

正規表示式中有一些特定符號或符號序列具有特殊意義,一些常用符號簡介如下:

典籍檢索器無法支援的正規表示式

正規表示式極為彈性,由於技術限制,笈成典籍檢索器有些功能無法完全支援所有表示式。以下是一些已知的例子:

應用實例

以下列舉一些可在本站典籍檢索器使用的正規表示式。注意實際使用時要加上「re:」,且通常須把整個表示式加上雙引號,因為正規式示式的特殊字元通常在典籍檢索器也有特殊意義,會導致誤判。例如「re: "五(臟|藏)六(腑|府)"」表示「含有『五(臟|藏)六(腑|府)』」,如果寫成「re: 五(臟|藏)六(腑|府)」會被錯誤解讀成「含有『五』且含有『臟|藏』且含有『六』且含有『腑|府』」。

參考資源

正規表示式的參考資源極多,可自行尋找適當的學習資源。但要注意不同平台上的正規表示式語法稍有差異(一般稱作不同風味(flavor)),把一個平台的正規表示式搬到另一平台使用,往往須稍做調整。

例如JavaScript的正規表示式常寫成形如「/<div>.*?<\/div>/i」,其中頭尾的「/」是定界字元(delimiter),定界字元不是正規表示式的一部分,只是為了在程式語言中標示正規表示式的開始和結束,若正規表示式也會用到定界字元,則也必須做脫義處理,以免被誤判為結尾;結尾後的一或多個字母是調整正規表示式行為的標幟(flag),或稱修飾符號(modifier)。常見標幟如下:

如前所述,支援正規表示式的軟體工具很多,即使不寫程式,正規表示式也可用於文字資料的搜尋及取代,以簡化許多繁瑣的操作。以下是一些不必寫程式也能使用正規表示式的工具:

一些可參考的資料如下:

  1. 用十分鐘學會字串處理的那些事兒:陳鍾誠教授寫的入門教學。
  2. Regular-Expressions.info:介紹各種風味的正規表示式,及一些中階技巧。
  3. RexEgg:提供一些進階技巧,一般使用未必需要,但要寫出最佳化、高效能的正規表示式可以參考。
  4. Mastering Regular Expressions:聖經級的正規表示式教科書,從基本知識到高深技巧都有。網路上有免費版可供閱讀。