2009/9/22

[Regex] 超讚!免費的 Regular Expression 輔助編輯與測試工具

對於想要開發 Regular Expression 的人, Expresso 是一個很好用的工具,不但可以即時製作 Regular Expression 字串,而且可以立即驗證、測試。你可以在 Ultrapico 網站 下載最新版本(如該頁所顯示的, 你必須先在 註冊頁中註冊,才能取得一個免費的註冊碼, 否則只能試用 60 天)。

下載並安裝後,它的第一個畫面看起來對我們台灣人可能不是很友善,而且又是英文介面... 不過,千萬別因此被它嚇到而打退堂鼓了。其實,你如果看到我在下面的介紹,然後再耐心的給它玩個兩分鐘,你就會發現它原來是這麼的簡單,而且它在畫面其實已經把操作的方法寫得一清二楚,一點也不困難喔!

一開始,在左上方的 Regular Expression 文字框裡面已經提供了一個現成的樣式(如以下圖中標示為1的地方)。在偏左下方的 Sample Text 文字框是將要被拿來檢測的文字(如圖中標示為2的地方), 而右下方的 search Results 文字框則是檢測的結果(如圖中標示為4的地方)。

如上圖, 如果你進入 Expresso 之後都沒有改變什麼東西的話, 那麼這時按下上方的 Run Matche 按鈕(如圖中標示為3的地方), 或者按下 F5 快速鍵,你會看到在 Search Results 方框中出現了幾個日期格式的文字。它們是哪裡來的呢?這幾個日期格式的文字都是從 Sample Text 方框中的文字,根據你指定的 Regular Express 字串進行搜尋、比對後得到的。

如果你開啟程式中 "Library"、"Edit the Regular Expression Library" 選單的話,你可以看到並套用許多已經預先定義好的現在樣式。例如,你可以選擇 "IP Addresses" 這個項目,按下偏上方的 "Select" 字樣,即可將此樣式帶入 Expresso 主視窗中並取代原有的樣式。或者你也可以直接按下 Regular Expression Library 子視窗中的三角型 Play 按鈕 (就在剛才的 Select 旁邊),如此它不但會帶該樣式,還會立即執行 Run Match。你可以自己試試看不同的預設樣式並觀察結果。

我們也可以在主視窗中第三個頁籤 (Expression Library) 裡面快速的取用現成的樣式。如果你不想設計自訂樣式的話, 直接來這裡選取現成樣式是比較方便的。

現在我們再來做個實驗,把內建的 Regular Express 字串

  • \((?<AreaCode>\d{3})\)\s*(?<Number>\d{3}(?:-|\s*)\d{4})

修改成:

  • \((?<AreaCode>\d{2})\)\s*(?<Number>\d{4}(?:-|\s*)\d{4})

然後再把 Sample Input Data 方框中的文字,加上 "(02)2514-1234" 這個符合台北地區電話號碼格式的文字,然後再按 Find Matches,是不是可以搜尋到了呢?

運用同樣的方法,你就可以自己進行 Regular Expression 字串的驗證與修改了。

如果你要從無到有產生新的 Regular Expression 字串,那麼請按 Show Builder 按鈕,或者按下 Ctrl-D 快速鍵,或者直接進入第二個頁籤 (Design Mode)。它是一個蠻好用的輔助工具,可以協助你建製出 Regular Expression。當然,你可以立即在本工具中進行驗證與測試。

如果你對 Regular Expression 並不熟悉的話,你可以參考「[Regex] Regular Expression 詳論」一文,或參考 MSDN 網站中的 Regular Expression Language Elements

如果你把某些 Regular Expression 寫進 ASP.NET 的 RegularExpressionValidator 控制項,卻在網頁上瀏覽時出現 JavaScript 錯誤的話,那有可能是因為該瀏覽器的 JavaScript 解譯程式不認識 .Net 中 Regular Expression 的群組功能(請參考「[Regex] Regular Expression 詳論」中對於群組的介紹)。當遇到這種情形時,請檢查語法中是不是有以問號開頭的片段,例如 ?<AreaCode> 或 (?x) 之類的。你必須把這些字刪除才能成功。

此外, Roy Osherove 的 Regulator 也是一個不錯的工具,有興趣者可以試試看。

沒有留言:

張貼留言