为什么\ b与使用.net正则表达式的单词不匹配

时间:2012-06-19 15:22:15

标签: c# .net regex

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

所以我在expresso中创建了我的正则表达式,并且我做了一个匹配。现在,当我将相同的正则表达式复制到visual studio时,我没有得到匹配。看看:


enter image description here


enter image description here

为什么我没有比赛?在即时窗口中,我显示了变量输出的内容。在expresso我得到一个匹配,在视觉工作室,我没有。为什么呢?

2 个答案:

答案 0 :(得分:25)

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

@"\bCOMPILATION UNIT";

或者

"\\bCOMPILATION UNIT"

我会说.NET RegEx文档没有说明这一点。我花了一段时间才弄明白这一点。

Fun-fact:\r\n字符(分别为回车和换行符)和其他一些字符被 RegEx和C#语言识别,所以即使编译后的字符串不同,最终结果也是一样的。

答案 1 :(得分:3)

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