【问题标题】:Why does Visual Studio use such a strange regex syntax为什么 Visual Studio 使用如此奇怪的正则表达式语法
【发布时间】:2010-06-09 16:55:10
【问题描述】:

Visual Studio 使用这种奇怪的语法有什么原因吗(例如在搜索/替换对话框中)?

我必须写:b*{:a+} = new Process\(\),而不是写\s*(\w+) = 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 StudioC#)了解更多信息。

这有什么原因吗?是历史的吗?有什么优势吗?

【问题讨论】:

标签: regex visual-studio-2008 syntax


【解决方案1】:

我引用编码恐怖:

但是,您遇到了不愉快的事情 当您尝试实际时感到惊讶 使用正则表达式查找 Visual Studio 中的任何内容。显然 Visual Studio IDE 有自己的 混蛋的正则表达式语法。 为什么?谁知道。可能是为了奥术 向后兼容的原因, 虽然我不知道你为什么想要 使精神错乱永远发扬光大。 显然它使人 亿万富翁,我该评判谁。

http://www.codinghorror.com/blog/2006/07/the-visual-studio-ide-and-regular-expressions.html

【讨论】:

  • 感谢链接 - 文章中的第一个屏幕截图很棒 - 它显示了当我按下箭头按钮时会发生什么,我总是忽略和忽略 ^^
【解决方案2】:

好消息:

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 正则表达式转换。

不再需要学习奇怪的正则表达式风格。

【讨论】:

  • 一个需要登录的链接让我很难过=(
  • 标准的.NET正则表达式仍然使用非标准语法
【解决方案3】:

嗯,他们试图让它“更容易”使用,看起来,对于 C++ 编码器。

考虑到他们提供了新的非标准表达式,例如

C/C++ 标识符 :一世 匹配表达式 ([a-zA-Z_$][a-zA-Z0-9_$]*) 带引号的字符串 :q 匹配表达式 (("[^"]*")|('[^']*'))。

我认为它具有完全不同语法的原因是正则表达式用户清楚地看到它的非标准和与普通正则表达式不同

哪个好。总而言之,它是一个很好的正则表达式引擎并且易于使用。

【讨论】:

  • 我不确定这是否是件好事。至少我在这种特殊的语法上苦苦挣扎。但我不得不承认,我在没有 Visual Studio 的情况下进行了很多编程。每天使用它可能会更容易。但无论哪种方式 - 无论我使用哪个正则表达式引擎,它们似乎都非常相似,除了 Visual Studio 之外,一切都不同:/
  • 我想搜索 2 到 5 个特定字母后跟 1 到 2 个数字的事件。在“真正的” reg ex 中,我可能会这样做: 但在视觉工作室中......我做不到。 Micro$oft 至少应该允许使用 POSIX reg ex.
【解决方案4】:

我最好和最诚实的回答是因为他们是 Microsoft,因此他们可以使用他们选择的任何标准。某处的某些程序员可能认为上述语法对他们来说更清晰或更容易编码,因此它成为了规范。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2013-07-13
    相关资源
    最近更新 更多