Visual Studio 使用 .NET framework 正则表达式查找和替换文本。在 Visual Studio 2010 和早期版本中,Visual Studio 在“查找和替换”窗口中使用自定义正则表达式语法。本主题介绍如何将一些更常用的自定义正则表达式符号转换为 .NET 版本。
| .gif) 提示 | 
|---|
| 在 Windows 操作系统中,大多数行以“\r\n”结尾(回车后跟一个新行)。这些字符不可见,但是会显示在编辑器中并传递给 .NET 正则表达式服务。 | 
有关更多信息,请参见 .NET Framework 正则表达式。
| .gif) 提示 | 
|---|
| 有关替换模式中所用的正则表达式的信息,请参见 正则表达式中的替代。若要使用编号的捕获组,语法是 $1 指定编号组,(x) 指定相关组:例如,该分组的正则表达式 (\d)([a-z]) 在以下字符串中找到四个匹配:1a 2b 3c 4d。替换字符串 z$1 将字符串转换为 z1 z2 z3 z4>。{:z}([a-z]) 为已分组的正则表达式在 Visual Studio 2010 中的等效语法,而 z\1 是替换字符串在 Visual Studio 2010 中的等效语法。 | 
比较 .NET Framework 正则表达式
使用下表可以将 Visual Studio 早期版本中使用的正则表达式转换为 .NET Framework 正则表达式。
| 用途 | 新建 | 旧 | 新示例 | 
|---|---|---|---|
| 匹配任何单个字符(分行符除外) | . | . | a.o 匹配“around”中的“aro”和“about”中的“abo”,但不匹配“across”中的“acro”。 | 
| 匹配前面表达式的零个或更多匹配项(并匹配尽可能多的字符) | * | * | “a*r”与“rack”中的“r”、“ark”中的“ar”和“aardvark”中的“aar”匹配。 | 
| 匹配任何字符零次或多次(通配符 *) | .* | .* | c.*e 与“racket”中的“cke”、“comment”中的“comme”以及“code”中的“code”匹配。 | 
| 匹配前面表达式的一个或更多匹配项(并匹配尽可能多的字符) | + | + | e.+e 与“feeder”中的“eede”而不是“ee”匹配。 | 
| 匹配任一字符一次或多次(通配符 ?) | .+ | .+ | “e.+e”匹配“feeder”中的“eede”而不是“ee”。 | 
| 匹配前面表达式的零个或更多匹配项(并匹配尽可能少的字符) | *? | @ | e.*?e 与“feeder”中的“ee”而不是“eede”匹配。 | 
| 匹配前面表达式的一个或更多匹配项(并匹配尽可能少的字符) | +? | # | “e.+?e”匹配“enterprise”中的“ente”和“erprise”,但不匹配完整的单词“enterprise”。 | 
| 将匹配字符串锚定到行首或字符串首。 | ^ | ^ | ^car 仅当其在行首出现时才与“car”一次匹配。 | 
| 将匹配字符串锚定到行尾 | \r?$ | $ | End\r?$ 只有出现在行尾时才与“end”匹配。 | 
| 匹配一个集合中的任意单个字符 | [abc] | [abc] | “b[abc]”匹配“ba”、“bb”和“bc”。 | 
| 匹配字符范围内的任意字符 | [a-f] | [x-y] | “be[n-t]”匹配“between”中的“bet”、“beneath”中的“ben”和“beside”中的“bes”,但不匹配“below”。 | 
| 获取包含在圆括号内的表达式并对其进行隐式编号 | () | () | “([a-z])X\1”与“aXa”和“bXb”匹配,但与“aXb”不匹配。".“\1”是指第一个表达式组“[a-z]”。 | 
| 匹配无效 | (?!abc) | ~(abc) | “real (?!ity)”匹配“realty”和“really”中的“real”,但不匹配“reality”中的“real”。它还在“realityreal”中找到第二个“real”(但不是第一个“real”)。 | 
| 匹配不在给定字符集中的任意字符 | [^abc] | [^abc] | “be[^n-t]”匹配“before”中的“bef”、“behind”中的“beh”和“below”中的“bel”,但是不匹配“beneath”。 | 
| 匹配符号之前或之后的那个表达式。 | | | | | (sponge|mud) bath 匹配“sponge bath”和“mud bath”。 | 
| 对反斜杠之后的字符进行转义 | \ | \ | “\^”匹配 ^ 字符。 | 
| 指定前一个字符或组出现的次数 | {x},其中 x 是指出现的次数 | \x,其中 x 是指出现的次数 | x(ab){2}x 匹配“xababx”,x(ab){2,3}x 匹配“xababx”和“xabababx”而非“xababababx”。 | 
| 匹配 Unicode 字符类中的文本,文本中的“X”为 Unicode 数字。有关 Unicode 字符的更多信息,请参见 | \p{X} | :X | “\p{lu}”与“Thomas Doe”中的“T”和“D”匹配。 | 
| 匹配字边界 | “\b”(在字符类 \b 之外指定字边界,并在字符类指定 Backspace)。 | “<”和“>”指定单词的开头和结尾 | “\bin”与“inside”中的“in”匹配,但与“pinto”不匹配。 | 
| 匹配换行符(即,回车后跟一个新行)。 | \r?\n | \n | “End\r?\nBegin”仅当“End”是一行中的最后一个字符串和“Begin”是下一行中的第一个字符串时匹配单词“End”和“Begin”。 | 
| 匹配任何字母数字字符 | \w | :a | “a\wd”与“add”和“a1d”匹配,但不匹配“a d”。 | 
| 匹配任何空白字符。 | (?([^\r\n])\s) | :b | “Public\sInterface”匹配短语“Public Interface”。 | 
| 匹配任何数字字符 | \d | :d | “\d”与和“3456”中的“3”、“23”中的“2”和“1”中的“1”匹配。 | 
| 匹配 Unicode 字符 | \uXXXX,其中 XXXX 表示 Unicode 字符值。 | \uXXXX,其中 XXXX 表示 Unicode 字符值 | \u0065 匹配字符“e”。 | 
| 匹配标识符 | \b(_\w+|[\w-[0-9_]]\w*)\b | :i | 与“type1”匹配,而不是与“&type1”或“#define”。 | 
| 匹配引号中的字符串 | ((\".+?\")|('.+?')) | :q | 匹配单引号或双引号中的任意字符串。 | 
| 匹配十六进制数 | \b0[xX]([0-9a-fA-F])\b | :h | 匹配“0xc67f”,不匹配“0xc67fc67f”。 | 
| 匹配整数和小数 | \b[0-9]*\.*[0-9]+\b | :n | 匹配“1.333”。 |