在 Visual Studio 中使用規則運算式

適用于:yesVisual Studio no Visual Studio for Mac no Visual Studio Code

Visual Studio 會使用 .NET 規則運算式來尋找和取代文字。

規則運算式範例

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

目的 運算式 範例
比對任何單一字元 (分行符號除外)。 如需詳細資訊,請參閱任何字元 . a.o 比對 「about」 中的 「aro」 和 「about」 中的 「abo」,而不是 「across」 中的 「acro」
比對先前運算式中零個或多個項目 (比對的字元越多越好)。 如需詳細資訊,請參閱比對零或多次 * a*r 會比對 "rack" 中的 "r"、"ark" 中的 "ar",以及 "aardvark" 中的 "aar"
比對任何字元零或多次。 .* c.*e 會比對 "racket" 中的 "cke"、"comment" 中的 "comme",以及 "code" 中的 "code"
比對先前運算式中一個或多個項目 (比對的字元越多越好)。 如需詳細資訊,請參閱比對一或多次 + e+d 會比對 「feeder」 中的 「eed」 與 「faded」 中的 「ed」
一或多次比對任何字元。 .+ e.+e 會比對 「feeder」 中的 「eede」,但在 「feed」 中找不到相符專案
比對先前運算式中零個或多個項目 (比對的字元越少越好)。 如需詳細資訊,請參閱比對零或多次 (Lazy (忽略優先) 比對) *? \w*?d 會比對 「fad」 和 「ed」 中的 「faded」,但不會比對因為延遲比對而使整個字「淡化」
比對先前運算式中一個或多個項目 (比對的字元越少越好)。 如需詳細資訊,請參閱比對一或多次 (Lazy (忽略優先) 比對) +? e\w+? 會比對 「asleep」 中的 「ee」 和 「ed」,但在 「fade」 中找不到相符專案
將比對字串錨定至行首或字串開頭 ^ ^car 只有在出現在行開頭時,才會比對 「car」 這個字
將比對字串錨定至行尾 \r?$ car\r?$ 只有在出現在行尾時,才會比對 「car」
將比對字串錨定至檔案結尾 $ car$ 只有在出現在檔案結尾時,才會比對 「car」
比對集合中的任何單一字元 [abc] b[abc] 會比對 「ba」、「bb」 和 「bc」
比對字元範圍之間的任何字元 [a-f] be[n-t] 會比對 「between」、「ben」 中的 「between」、「bes」 中的 「bes」 和 「beside」 中的 「bet」,但在 「below」 中找不到相符專案
擷取和隱含編號包含在括號內的運算式 () ([a-z])X\1 會比對 "aXa" 和 "bXb",但不比對 "aXb"。 "\1" 表示第一個運算式群組 "[a-z]"。 如需詳細資訊,請參閱擷取群組和取代模式
使比對失效 (?!abc) real(?!ity) 會比對 「realty」 和 「real」 中的 「real」,但與 「reality」 不相符。它也會發現第二個「實境」 (,而不是「實境」中第一個「實境」) 。
比對任何不在一組特定字元中的字元。 如需詳細資訊,請參閱負字元群組 [^abc] be[^n-t] 會比對 「before」 中的 「bef」、「beh」 中的 「behind」 和 「below」 中的 「bef」,但在 「below」 中找不到相符專案
比對符號之前或之後的運算式 | (sponge|mud) bath 會比對 「spongee和」儲存區」
逸出反斜線之後的字元 \ \^ 會比對字元 ^
指定前置字元或群組的出現次數。 如需詳細資訊,請參閱比對 n 次 {n},其中 'n' 是發生次數 x(ab){2}x 符合 "xababx"
x(ab){2,3}x 符合 "xababx" 與 "xabababx",但不符合 "xababababx"
比對 Unicode 類別中的文字。 如需 Unicode 字元類別的詳細資訊,請參閱 Unicode Standard 5.2 字元屬性 \p{X},其中 "X" 是 Unicode 數字。 \p{Lu} 符合 「Thomas Doe」 中的 「T」 和 「D」
比對字界限 \b (在字元類別之外 \b 會指定字邊界,在字元類別 \b 內則會指定退格鍵。) \bin 會比對 「inside」 中的 「in」,但在 「pinto」 中找不到相符專案
比對分行符號 (即歸位字元後面接著新行) \r?\n End\r?\nBegin 只有在 「End」 是行的最後一個字串,而 「Begin」 是下一行中的第一個字串時,才會比對 「End」 和 「Begin」。
比對任何文字字元 \w a\wd 會比對 「add」 和 「a1d」,但不符合 「a d」
比對任何空白字元 \s Public\sInterface 符合片語 「Public Interface」
比對任何十進位數字字元 \d \d 會比對 「wd40」 中的 「4」 和 「0」

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

提示

在 Windows 作業系統中,大部分的程式行都是以 "\r\n" 結尾 (歸位字元後面接著新行)。 這些字元不可見,但出現在編輯器中,並傳遞至 .NET 正則運算式服務。

擷取群組和取代模式

擷取群組會描寫規則運算式的子運算式,以及擷取輸入字串的子字串。 您可以使用規則運算式本身內部 (例如,尋找重複的字詞),或取代模式中擷取的群組。 如需詳細資訊,請參閱規則運算式中的群組建構

若要建立編號的擷取群組,請用規則運算式模式中的括弧括住子運算式。 擷取會依據規則運算式中的左括號的位置,由左至右自動編號。 存取擷取的群組:

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

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

下圖顯示規則運算式 (\w+)\s\1 和取代字串 $1。 規則運算式和取代模式會參考自動編號為 1 的第一個擷取群組。 當您在 Visual Studio 的 [快速取代] 對話方塊中選擇 [全部取代] 時,會將重複的字組從文字中移除。

Quick Replace showing a numbered capture group in Visual Studio

提示

請確定已選取 [快速取代] 對話方塊中的 [使用規則運算式] 按鈕。

具名的擷取群組

您可以改為為擷取群組命名,不使用自動編號。 具的擷取群組的語法為 (?<name>subexpression)

具名擷取群組 (例如編號的擷取群組),可在規則運算式本身或在取代模式中使用。 存取具名擷取群組:

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

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

舉例來說,下圖顯示規則運算式 (?<repeated>\w+)\s\k<repeated> 和取代字串 ${repeated}。 規則運算式和取代模式會參考名為 repeated 的擷取群組。 當您在 Visual Studio 的 [快速取代] 對話方塊中選擇 [全部取代] 時,會將重複的字組從文字中移除。

Quick Replace showing a named capture group in Visual Studio

提示

請確定已選取 [快速取代] 對話方塊中的 [使用規則運算式] 按鈕。

如需具名擷取群組的詳細資訊,請參閱具名的相符子運算式。 如需取代模式中所用規則運算式的詳細資訊,請參閱規則運算式中的替代項目

另請參閱