正则表达式在“在文件中查找”和“在当前搜索文件”

时间:2015-07-30 08:53:56

标签: c# regex visual-studio-2013

我试图在代码中查找所有字符串,同时排除AssemblyInfo.cs文件,注释和XML内容等内容。

我提出了一个正则表达式,当我将它与 Ctrl + F 一起使用时,但是在尝试将它与&#34一起使用时;在文件中查找"对话框( Ctrl + Shift + F ),它提供任意结果,包括空行和仅包含例如空行的行。一个开口大括号{。

这是VS2013中的错误吗?遗憾的是,我没有其他版本可用于测试此行为。

这是正则表达式及其解释:

^[^\[/<]*\".*\"

^: Start of line
[^\[/<]*: Any amount of characters which are not [, / or <
\".*\": Any amount of characters enclosed by two quotation marks

当使用常规搜索( Ctrl + F )时,这会正确检测

之类的行
  "This is a test"
  someObject->doSomething("This is a test");

并且故意不检测如下行:

 [assembly: AssemblyTitle("....")]
 /// <param name="Test">Test</param>

然而,当我使用&#34;在文件中查找&#34;对话框,同一个表达式列出了一些方法的完整实现,包括只有大括号,类定义和空行的行。

我是否必须使用与文件中的查找不同的语法或任何内容,或者它是否不支持与在一个文件中搜索时相同的功能?

[编辑:] 请注意,省略[...]表达式可以在两个搜索对话框中按预期工作

[EDIT2:] VS版本是&#34; Microsoft Visual Studio Professional 2013,版本12.0.30723.00更新3&#34;

1 个答案:

答案 0 :(得分:0)

与常规的“查找”对话框不同,正则表达式部分[^\[/<]*显然与“在文件中查找”对话框中的换行符匹配。

问题可以通过在表达式的这一部分和引号之间明确排除\n来解决:

Full Expression: ^[^\n\[/<]*"[^\n]*"

Visual Studio 2013可能不支持(?m)修饰符,它似乎被忽略,至少在此示例中。