我试图在我的代码中查找所有字符串,同时排除 AssemblyInfo.cs 文件、注释和 XML 内容等内容。
我想出了一个正则表达式,当我将它与 Ctrl+F 一起使用时,它会起作用,但是当我尝试将它与“在文件中查找”一起使用时对话框 (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>
但是,当我使用“在文件中查找”对话框时,相同的表达式列出了一些方法的完整实现,包括只有大括号的行、类定义和空行。
在文件中查找是否必须使用不同的语法或其他语法,或者它不支持与在一个文件中搜索时相同的功能?
[编辑:] 请注意,省略 [...] 表达式在两个搜索对话框中都按预期工作
[编辑2:] VS 版本为“Microsoft Visual Studio Professional 2013,版本 12.0.30723.00 更新 3”
最佳答案
正则表达式部分[^\[/<]*
显然匹配“在文件中查找”对话框中的换行符,这与常规的“查找”对话框不同。
明确排除\n
即可解决问题在表达式的这一部分和引号之间:
Full Expression: ^[^\n\[/<]*"[^\n]*"
(?m)
Visual Studio 2013 可能不支持修饰符,它似乎被忽略了,至少在这个例子中是这样。
关于c# - 正则表达式在“在文件中查找”和“搜索当前文件”中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31719262/