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

标签 c# regex visual-studio-2013

我试图在我的代码中查找所有字符串,同时排除 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/

相关文章:

Azure API 应用程序对 WebJobs 的支持

c# - body .NET MVC 上的 XSS 验证

c# - 存储变量类型并在运行时使用它创建集合

c# - 带有 MVC4 的 Newtonsoft JSON 无法转换参数类型

c# - 如何解决 Funq IoC 中的循环依赖?

javascript - 在javascript中的第一个数字之前获取一个子字符串

python - 在字符和第一个空格之间搜索

visual-studio-2013 - Visual Studio 2013 对项目中所有引用的黄色警告

php - 如何编写匹配嵌套括号的递归正则表达式?

git - VS2012 和 VS2013 争夺 .sln header