正则表达式在“在文件中查找”和“搜索当前文件”中的行为不同
本文关键字:文件 查找 正则表达式 搜索 | 更新日期: 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,它似乎被忽略了,至少在这个例子中。