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

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

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


在此处输入图像描述


在此处输入图像描述

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

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

 @"\bCOMPILATION UNIT"; 

要么

 "\\bCOMPILATION UNIT" 

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

有趣的事实: \r\n字符(分别为回车符和换行符)和其他一些字符都被RegEx和C#语言识别,因此即使编译后的字符串不同,最终结果也是一样的。

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