6

要查看常规表达式,我阅读了本教程。无论如何,该教程提到\b匹配单词边界(在 \w 和 \W 字符之间)。该教程还提供了一个链接,您可以在其中安装 expresso(有助于创建正则表达式的程序)。

所以我在 expresso 中创建了我的正则表达式,我确实得到了匹配。现在,当我将相同的正则表达式复制到 Visual Studio 时,我没有得到匹配。看一看:


在此处输入图像描述


在此处输入图像描述

为什么我没有得到匹配?在即时窗口中,我正在显示变量输出的内容。在 expresso 中我确实得到了匹配,而在视觉工作室中我没有。为什么?

4

2 回答 2

26

C# 语言和.NET正则表达式都有自己独特的反斜杠转义序列集,但 C# 编译器会拦截"\b"字符串中的 并将其转换为 ASCII 退格字符,因此RegEx类永远不会看到它。您需要逐字制作字符串(带有 at 符号的前缀)或双重转义“b”,以便将反斜杠传递给 RegEx,如下所示:

@"\bCOMPILATION UNIT";

或者

"\\bCOMPILATION UNIT"

我会说.NET RegEx 文档并没有说明这一点。起初我也花了一段时间才弄清楚这一点。

有趣的事实:\rand\n字符(分别是回车和换行符)和其他一些字符被 RegEx 和 C# 语言识别所以最终结果是相同的,即使编译的字符串不同。

于 2012-06-19T15:27:01.810 回答
3

你应该使用@"\bCOMPILATION UNIT". 这是逐字逐句。相反,当您这样做时"\b",它会解析\b为一个特殊字符。你也可以这样做"\\b",它的双反斜杠被解析成一个真正的反斜杠,但在处理正则表达式时通常更容易使用逐字逐句。

于 2012-06-19T15:27:47.967 回答