﻿# 介紹好用 Visual Studio 2010 擴充套件：Regex Editor

在 Visual Studio 2010 的線上擴充套件裡有個 [Regex Editor](http://visualstudiogallery.msdn.microsoft.com/55c24bf1-2636-4f94-831d-28db8505ce00/) 小工具，安裝好之後可以讓你在 Visual Studio 2010 程式編輯區撰寫 [Regex](http://msdn.microsoft.com/zh-tw/library/system.text.regularexpressions.regex.aspx) 類別程式時自動跳出 Regex 編輯管理視窗，讓你可以在一個工具視窗中編寫、測試、管理你所撰寫的 **正則表達式** (**Regular Expression**)，這工具雖然是簡單的小東西而且很容易讓你忘記他的存在，但不小心開啟編輯視窗時還是會覺得很貼心的。

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

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f0d5cc6bfd985c610a40-SNAGHTML27116b4d_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c9f990264a5d919d5100-SNAGHTML27116b4d.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1dd3cc6b36a652f0263b-image_740.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/76e89fb9f6f5a12eaf2f-image_741.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/327dc5f2478253a42bb6-image_742.png)

接著我們按下「左刮號」之後，我們剛剛安裝的 [Regex Editor](http://visualstudiogallery.msdn.microsoft.com/55c24bf1-2636-4f94-831d-28db8505ce00/) 編輯畫面這才會跳出來！

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/118ea380f68c95bf5980-image_743.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/713e26a528478de9d1cc-image_744.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/09f32b85d5c103f2d166-image_745.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/9213841955bb26d52115-image_746.png)

然後原始碼的地方也會出現你之前在 [Regex Editor](http://visualstudiogallery.msdn.microsoft.com/55c24bf1-2636-4f94-831d-28db8505ce00/) 設定好的 **正則表達式** 語法：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0751bfbca50cb9eb21a6-image_747.png)

然而，你下次又再度使用到 Regex 類別時，[Regex Editor](http://visualstudiogallery.msdn.microsoft.com/55c24bf1-2636-4f94-831d-28db8505ce00/) 會貼心的幫你把先前輸入過的 **正則表達式** 儲存起來，當你點選 **More…** 展開之後切換到 **Saved Expressions** 頁籤就可以選取先前輸入過的 **正則表達式** 了，如果你想在 Title 或 Description 欄位進行編修文字可以用滑鼠雙擊該欄位即可修改文字。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f0faa185038d1a196152-image_748.png)

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fb3dedb5df2710e1f881-image_749.png)

**後記**

我曾經講過 **正則表達式** (**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人力銀行的徵才網頁](http://www.518.com.tw/job-detail-334444.html) 查看，謝謝。

**相關連結**

-   [Regex Editor](http://visualstudiogallery.msdn.microsoft.com/55c24bf1-2636-4f94-831d-28db8505ce00/)
-   [整理一些 Regex 的學習資源](/post/2008/03/23/Regular-Expression-Regex-Learning-Resources.aspx)
-   [Visual Studio 2010 Editor Samples](https://github.com/microsoft/VSSDK-Extensibility-Samples)
