Visual Studio使用这种奇怪的语法(例如在搜索/替换对话框中)是否有任何理由?
我必须写\s*(\w+) = new Process\(\)
而不是写:b*{:a+} = new Process\(\)
我总是在努力学习这种语法 - 特别是因为正常的.NET语法是前一种语法。
这是两种语法之间的不完全比较:
What Visual .NET Comment
Studio
----------------------------------------------------------------
Tab/Spaces :b \s Either tab or space
Alphanumeric :a \w ([a-zA-Z0-9])
Subexpression {} ()
Substitution \n $n Substitutes the substring matched
by a numbered subexpression.
Backreference \n \n Matches the value of a numbered
subexpression.
----------------------------------------------------------------
有关详细信息,请参阅此处(Visual Studio,C#)。
这有什么理由吗?这是历史性的吗?有什么优势吗?
答案 0 :(得分:24)
我引用Coding Horror:
然而,你是一个不愉快的人 当你试图实际时会感到惊讶 使用正则表达式来查找 Visual Studio中的任何内容。显然地 Visual Studio IDE有自己的 bastardized正则表达式语法。 为什么?谁知道。可能是为了奥术 向后兼容性原因, 虽然我不知道你为什么要这么做 永远发扬疯狂。 显然,它使人们 亿万富翁,我该判断谁。
http://www.codinghorror.com/blog/2006/07/the-visual-studio-ide-and-regular-expressions.html
答案 1 :(得分:17)
好消息:
Since Visual Studio 2013, the search uses standard .NET regular expressions:
Visual Studio使用.NET Framework正则表达式来查找和替换文本。有关.NET正则表达式的更多信息,请参阅.NET Framework正则表达式。 在Visual Studio 2012之前,Visual Studio在“查找和替换”窗口中使用自定义正则表达式语法。有关如何将一些常用的自定义正则表达式符号转换为.NET版本的说明,请参阅Visual Studio正则表达式转换。
不再需要学习一种奇怪的正则表达方式。
答案 2 :(得分:6)
好吧,他们试图让C ++编码器“更容易”使用它。
考虑他们提供了新的非标准表达,比如
C/C++ Identifier :i Matches the expression ([a-zA-Z_$][a-zA-Z0-9_$]*) Quoted string :q Matches the expression (("[^"]*")|('[^']*')).
我认为它具有完全不同语法的原因是正则表达式用户清楚地看到它的非标准和与正常的正则表达式不一样。
哪个好。总而言之,它是一款优秀的正则表达式引擎,易于使用。
答案 3 :(得分:1)
我最好和最诚实的答案是因为他们是微软,因此他们可以使用他们选择的任何标准。有些程序员可能会认为上面的语法对他们来说更清楚,或者更容易编码,因此它成了教规法。