【问题标题】:In Visual Studio 2010, how do you search for text that is not within a single line comment?在 Visual Studio 2010 中,如何搜索不在单行注释内的文本?
【发布时间】:2012-02-19 18:58:44
【问题描述】:

在 Visual Studio 2010 中,如何搜索不在单行注释内的文本?例如,如何在以下位置找到“bas”:

foo bar bas

但不在

foo bar // bas

注意它应该找到该行:

foo / bar / bas

(编辑)它不应该找到该行:

foo // bar bas

【问题讨论】:

  • 好的,所以我问了这个问题只是为了参考我自己的答案。不幸的是,我必须等待 8 小时才能回答我自己的问题。 Visual Studio 似乎没有典型的前瞻、后瞻结构。它确实有一个类似的零宽度否定断言。语法是 ~(x),这意味着模式在模式中的这一点上与 x 不匹配。使用这个结构,我想出了这个: ^(.~(//))*bas 效果很好,但不会匹配 // 是该行前两个字符的行。要修复的版本是:^~(//)(.~(//))*bas
  • 你问一个问题只是为了自己回答?
  • 那么,您发表评论是因为我已经回答了您的问题吗? :)

标签: regex visual-studio visual-studio-2010 search regex-negation


【解决方案1】:

在 Visual Studio 的“查找”对话框中,尝试使用此正则表达式(确保在“查找”选项中选择 使用:正则表达式):

~(//[.:b]*)<bas>

这应该找到所有出现的单词bas,但前面没有//

请注意,Visual Studio 正则表达式语法与传统语法略有不同。你可以找到参考HERE

【讨论】:

  • 这在示例中不起作用: foo // bar / bas 其中 bas 在注释中,因此不应该被找到。不过,感谢您的回答和链接。此外, 单词边界可能不是必需的,尽管这取决于您想要什么。
  • 对于 VS2012 用户:“Visual Studio 2012 使用 .NET Framework 正则表达式来查找和替换文本。在 Visual Studio 2010 及更早版本中,Visual Studio 在查找和替换窗口中使用自定义正则表达式语法” .来源:Using Regular Expressions in Visual Studio
【解决方案2】:

好的,所以我问这个问题只是为了参考我自己的答案。

Visual Studio 似乎没有典型的前瞻、后瞻结构。它确实有一个类似的零宽度否定断言。语法是 ~(x),这意味着模式在模式中的这一点上与 x 不匹配。使用这个结构,我想出了这个:^(.~(//))*bas 效果很好,但不会排除 // 是该行前两个字符的行。要修复的版本是:^~(//)(.~(//))*bas

【讨论】:

    猜你喜欢
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多