共用方式為


在 Visual Studio 中使用正規表示式

Visual Studio 會使用 .NET 正則表示式 來尋找和取代文字。

正則表達式語法

下表包含一些正則表達式字元、運算元、建構和模式範例。 如需更完整的參考,請參閱 正規表示式語言

目的 表達
比對任何單一字元(不包括換行符)。 如需詳細資訊,請參閱 任何字元 . a.o 會比對 “around” 中的 “aro”和 “about” 中的 “abo”,但不會符合 “across” 中的 “acro”
比對前一個表達式出現的零次或多次(比對出現的字元數越多越好)。 如需更多資訊,請參閱 匹配零次或多次 * a*r 對應於“rack”中的“r”、“ark”中的“ar”,以及“aardvark”中的“aar”
匹配(或比對)任意字符零次或多次。 .* c.*e 匹配 "racket" 和 "comme" 中的 "cke",以及 "code" 中的 "code"
比對前面的表達式的一次或多次出現(盡可能比對最多的字元)。 如需詳細資訊,請參閱 匹配一或多次 + e+d 符合 “feeder” 中的 “eed” 和 “faded” 中的 “ed”
匹配任意字元一次或多次。 .+ e.+e 在「feeder」中匹配「eede」,但在「feed」中找不到匹配。
比對前面表達式的零次或多次出現(盡可能少地比對字元)。 如需詳細資訊,請參閱 比對零次或多次 (延遲比對) *? \w*?d 比對 「fad」 和 「ed」 在 「faded」 中, 但不是整個字 「faded」 ,因為延遲比對
比對前述表達式的一次或多次出現(盡可能匹配最少的字元)。 如需詳細資訊,請參閱 比對一或多次 (延遲比對) +? e\w+? 符合「asleep」中的「ee」和「faded」中的「ed」,但在「fade」中找不到相符項目。
將比對字串錨定在行首或字串開頭 ^ 只有在行開頭出現時,^car 才會比對 「car」 這個字
將比對字串錨定在 的末尾 \r?$ 只有當 car\r?$ 出現在行尾時,才會比對 “car”
將比對字串錨定到檔案的結尾 $ 只有當“car”出現在檔案末尾時,car$ 才會匹配它。
比對集合中的任何單一字元 [abc] b[abc] 符合 “ba”、“bb” 和 “bc”
匹配字元範圍中的任何字元 [a-f] be[n-t] 比對了「between」中的 "bet"、「beneath」中的 "ben" 和「beside」中的 "bes",但在「below」中找不到相符的部分。
擷取並隱含編弧括弧中包含的表達式 () ([a-z])X\1 符合 「aXa」 和 「bXb」 ,但不符合 「aXb」。 “\1” 是指第一個表達式群組 “[a-z]”。 如需詳細資訊,請參閱 擷取群組和取代模式
使比賽失效 (?!abc) real(?!ity) 匹配 "realty" 和 "really" 中的 "real",但不匹配 "reality"。它還會找到 "realityreal" 中的第二個 "real"(而不是第一個 "real")。
比對不屬於指定字元集合的任何字元。 如需詳細資訊,請參閱 負字元群組 [^abc] be[^n-t] 符合 “before” 中的 “bef”、“behind” 中的 “beh”,以及 “below” 中的 “bel”,但在 “beneath” 中找不到相符專案。
比對符號之前或之後的表達式 | (sponge|mud) bath 符合“海綿浴”和“泥浴”
反斜杠後面逸出字元 \ \^ 符合字元「^」
指定前一個字元或群組的出現次數。 如需詳細資訊,請參閱 精確匹配 n 次 {n},其中 'n' 是出現次數 x(ab){2}x 符合 “xababx”
x(ab){2,3}x 可以匹配「xababx」和「xabababx」,但不匹配「xababababx」
比對 Unicode 類別中的文字。 如需 Unicode 字元類別的詳細資訊,請參閱 Unicode Standard 15.0 字元屬性 \p{X},其中 “X” 是 Unicode 數位。 \p{Lu} 與 “Thomas Doe” 中的 “T” 和 “D” 相匹配。
比對字界限 \b (在字元類別外部 \b 指定字邊界,而在字元類別內部 \b 指定為後退鍵。) \bin 符合 「inside」 中的 「in」,但在 「pinto」 中找不到相符之處
比對換行符(也就是歸位字元後面接著新行,或僅換行符) \r?\n 只有當 “End” 是行的最後一個字符串,而 “Begin” 是下一行的第一個字符串時,End\r?\nBegin 才會比對 “End” 和 “Begin”
比對任何 單字字符 \w a\wd 符合 “add” 和 “a1d”,但不符合 “a d”
比對任何 空格符 \s Public\sInterface 符合「公用介面」詞組
比對任何 十進位字元 \d \d 對應於字符串 “wd40” 中的 “4” 和 “0”

結合某些運算子和建構以符合十六進位數位的範例正則表示式 \b0[xX]([0-9a-fA-F]+)\b。 此表達式符合 「0xc67f」,但不符合 「0xc67g」。。

提示

在 Windows 作業系統中,大部分行結尾為 「\r\n」 (歸位字元後面接著新行)。 這些字元不可見,但會出現在編輯器中,並傳遞至 .NET 正則表示式服務。 當您處理來自網路或非 Windows 操作系統的檔案時,請務必考慮它們可能只使用新行來換行。

擷取群組和取代模式

擷取群組會描述正則表達式的子表達式,並擷取輸入字串的子字串。 您可以在正則表示式本身內使用擷取的群組(例如尋找重複的單字),或在取代模式中使用。 如需詳細資訊,請參閱正規表示式中的 群組建構

若要建立編號的擷取群組,請在正則表達式模式中以括弧括住子表達式。 擷取會根據正則表達式中左括弧的位置自動從左至右編號。 若要存取擷取的群組,請考慮下列範例:

  • 正規表示式內:使用 \number。 例如,正規表示式中的 \1(\w+)\s\1 參考第一個擷取群組 (\w+)

  • 在取代模式中:使用 $number。 例如,群組正則表達式 (\d)([a-z]) 定義兩個群組:第一個群組包含單一十進位數,而第二個群組包含 z之間的單一字元。 表達式會在下列字串中找到四個相符的項目:1a 2b 3c 4d。 取代字串 z$1 僅參考第一個群組 ($1),並將字串轉換成 z1 z2 z3 z4

下圖顯示正規表示式 (\w+)\s\1 與取代字串 $1。 正則表達式和取代模式都會參考自動編號為 1 的第一個擷取群組。 當您在 Visual Studio 的 [快速取代] 對話框中選擇 [取代所有 時,會從文字中移除重複的字組。

Visual Studio 的 [快速取代] 功能螢幕快照,顯示編號擷取群組。

提示

在 [快速取代] 對話框中,請務必選取 [使用正則表達式 ] 按鈕,或按下 alt +E

具名捕獲群組

您可以為擷取群組指定名稱,而不是依賴擷取群組的自動編號。 具名擷取群組的語法是 (?<name>subexpression)

具名擷取群組,例如編號擷取群組,可以在正則表達式本身或取代模式中使用。 若要存取具名擷取群組,請考慮下列範例:

  • 正規表示式內:使用 \k<name>。 例如,正則表達式中的 \k<repeated>(?<repeated>\w+)\s\k<repeated> 參考名為 repeated 且其子運算式為 \w+的擷取群組。

  • 在取代模式中:使用 ${name}。 例如,${repeated}

下圖顯示正規表示式 (?<repeated>\w+)\s\k<repeated> 與取代字串 ${repeated}。 正則表達式和取代模式都會參考名為 repeated的擷取群組。 當您在 Visual Studio 的 [快速取代] 對話框中選擇 [取代所有 時,會從文字中移除重複的字組。

Visual Studio中顯示具名擷取群組的快速取代操作的螢幕截圖。

提示

請務必在 [快速取代] 對話方塊中選擇 [使用正則表示式] 按鈕(或按 [Alt+E])。

如需具名擷取群組的詳細資訊,請參閱 具名相符子表達式。 如需瞭解用於替代模式中的正規表示式的更多資訊,請參閱正規表示式的替代

例子

模式 描述
int ([_A-Za-z][_A-Za-z0-9]*) 比對單一整數定義。 標識符開頭為一個大寫或小寫字母,後面接著零或多個字母(以 *表示)字母或數位。 標識碼被外括號擷取為 $1
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ 比對初始化為整數常值的 C# 整數宣告、擷取各種元件,包括存取層級、conststatic、標識碼和定義的值等修飾詞。 請注意,使用至少一個空格符時請使用 \s+,而如果空格符可能存在或不存在時請使用 \s*
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) 比對 foreach 迴圈的開頭行。 字面上的括號會以反斜線轉義(\)。 各種群組會由未逸出的括弧擷取為 $1$2$3
#define\s+([_A-Za-z][_A-Za-z0-9]*) 比對 #define 定義(不包含值,如果有的話)。 定義的令牌會儲存在 $1中。
#include\s+["<](.*)[">] 比對包含於C++原始程序檔中。