The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用 Visual Studio 2010 擴充套件:Regex Editor

在 Visual Studio 2010 的線上擴充套件裡有個 Regex Editor 小工具,安裝好之後可以讓你在 Visual Studio 2010 程式編輯區撰寫 Regex 類別程式時自動跳出 Regex 編輯管理視窗,讓你可以在一個工具視窗中編寫、測試、管理你所撰寫的 正則表達式 (Regular Expression),這工具雖然是簡單的小東西而且很容易讓你忘記他的存在,但不小心開啟編輯視窗時還是會覺得很貼心的。

你可以從 Visual Studio 2010 的擴充管理員進行套件安裝,開啟後點選 線上圖庫 分類,然後在右上角的搜尋文字框輸入 Regex 就可以查到 Regex Editor 項目。

安裝好之後你看不到 Visual Studio 2010 的介面有任何變化,這個工具只會在用到的時候跳出來,我們先新增一個 主控台應用程式 (Console Application) 專案:

然後嘗試建立一個 Regex 物件實例,由於 Regex 隸屬於 System.Text.RegularExpressions 命名空間,所以這時我們可以按下 Ctrl + . 快速鍵快速引用命名空間:

接著我們開始把 Regex 物件給 new 出來,請注意下圖的地方,我們輸入到 new Regex 這一段了:

接著我們按下「左刮號」之後,我們剛剛安裝的 Regex Editor 編輯畫面這才會跳出來!

這裡可以讓你設定一個 標題 (Title) 與 正則表達式 (Expression),設計 Expression 的過程中還會提示你可以怎樣撰寫 正則表達式 的語法,非常貼心的設計。

不過當我們點選 More… 之後,你甚至可以先在這個視窗裡測試你寫好的 正則表達式 是否是對的,這對Regex 的初學者來說是個很有用的功能。我們以下圖為例,我在 Matches 欄位刻意輸入一個錯誤的 16 近位表示法的字串 ( 0x01234ZS56789 ),並按下 Match 按鈕進行測試,結果在 Result 竟然還會出現比對後的結果 ( 0x01234 )。

基本上,如果你想要比對的字串是從頭比對到尾,應該在正則表達式的前面加上 ^ 符號,在最後面加 $ 符號。加上之後我們再測試一次就發現這個樣式符合我的預期了。最後我們按下 Accept 按鈕即可完成 正則表達式 的撰寫任務。

然後原始碼的地方也會出現你之前在 Regex Editor 設定好的 正則表達式 語法:

然而,你下次又再度使用到 Regex 類別時,Regex Editor 會貼心的幫你把先前輸入過的 正則表達式 儲存起來,當你點選 More… 展開之後切換到 Saved Expressions 頁籤就可以選取先前輸入過的 正則表達式 了,如果你想在 Title 或 Description 欄位進行編修文字可以用滑鼠雙擊該欄位即可修改文字。

你也可以按下滑鼠右鍵將先前建立過的 正則表達式 給刪除掉。

後記

我曾經講過 正則表達式 (Regular Expression) 是學一次用一輩子的技術,而且這門技術也是任何程式設計師一定要學會的技能之一,而且不管什麼程式語言都有 Regular Expression 可用,雖然不同程式語言內建的 Regular Expression 語法多少有些小差異,但是基本的語法並不會差太多。

像我在面試人員時 Regular Expression 就是我必問的題目之一,只不過我發現 .NET 開發人員鮮少有人對 Regular Expression 很精通的,而且大部分人也看不太懂 Regular Expression 語法,想見在工作上用到 Regular Expression 的機會可能不多,不然就是需要用到的時候因為不熟悉,所以就先上網搜尋隨便抄一段來用再說,這寫都蠻可惜的。

以我個人帶人的經驗,若是遇到文字處理的情況,如果 Regular Expression 寫不好很容易寫出一些不容易發現的 Bug,要是不用 Regular Expression 來寫,那麼 Bug 更多、更明顯。另一個好玩的地方是,如果一個初學者去猜 Regular Expression 的語法所代表的意思,其實猜錯的機會大很多,這點我再面試的時候就看得很清楚了,很多人看到我出的 Regular Expression 語法在解釋時都是猜錯的。

我公司最近在招聘新人,以下是我面試時會考的 Regular Expression 語法,有興趣來面試的人可以先預習一下! XD

  • 請解釋以下 Regex 規則: [A-Z][12](\d{8})
  • 請解釋以下 Regex 規則: ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,30}$

意欲報名面試的人請將履歷寄至 hr@miniasp.com 信箱,或到 518人力銀行的徵才網頁 查看,謝謝。

相關連結