在 Visual Studio 中使用規則運算式
適用于:Visual Studio
Visual Studio for Mac
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])
會定義兩個群組:第一個群組包含單一的十進位數字,第二個群組包含介於 a 和 z 之間的單一字元。 運算式在下列字串中找到四個相符項目:1a 2b 3c 4d。 取代字串z$1
只參考第一個群組 ($1
),並將字串轉換成 z1 z2 z3 z4。
下圖顯示規則運算式 (\w+)\s\1
和取代字串 $1
。 規則運算式和取代模式會參考自動編號為 1 的第一個擷取群組。 當您在 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 的 [快速取代] 對話方塊中選擇 [全部取代] 時,會將重複的字組從文字中移除。
提示
請確定已選取 [快速取代] 對話方塊中的 [使用規則運算式] 按鈕。
如需具名擷取群組的詳細資訊,請參閱具名的相符子運算式。 如需取代模式中所用規則運算式的詳細資訊,請參閱規則運算式中的替代項目。