正则表达式在“在文件中查找”和“搜索当前文件”中的行为不同

本文关键字:文件 查找 正则表达式 搜索 | 更新日期: 2023-09-27 18:05:34

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

我已经提出了一个正则表达式,当我使用它与Ctrl+F,然而,当试图使用它与"查找文件"对话框(Ctrl+Shift+F),它提供了一个任意的结果,甚至包括空行和行,其中只包含例如一个开花括号{.

这是VS2013中的一个bug吗?遗憾的是,我没有其他可用的版本来测试此行为。

下面是正则表达式及其解释:

^[^'[/<]*'".*'"
^: 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>

然而,当我使用"在文件中查找"对话框时,相同的表达式列出了一些方法的完整实现,包括仅带大括号的行,类定义和空行。

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

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

[Edit2:]VS版本为"Microsoft Visual Studio Professional 2013, Version 12.0.30723.00 Update 3"

正则表达式在“在文件中查找”和“搜索当前文件”中的行为不同

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

这个问题可以通过在表达式的这一部分和引号之间显式地排除'n来解决:

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

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