我的任务是在我们的代码库中找到所有对CreateGraphics的调用,这些调用没有被using块包围并在它们周围添加块。
我知道我可以用正则表达式找到它们,但我需要一些语法帮助。
我需要一个可以与 Visual Studio 2010的“在文件中查找”对话框一起使用的正则表达式,该对话框将找到包含 CreateGraphics 的任何行,该行不以开头
匹配这个:
pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);
但不是这样:
using (Graphics g = label.CreateGraphics())
任何一行都可能在开头有空格,也可能没有空格。
答案 0 :(得分:1)
注意: 不再相关,因为问题描述以非常重要的方式发生了变化。我仍然会留在这里,因为它(在我看来)仍然是解决实际问题的可行方案。
(?<!using.+)\.CreateGraphics\(
可能会奏效。 PowerShell测试:
PS> $re='(?<!using.+)\.CreateGraphics\('
PS> 'pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);',
>> 'using (Graphics g = label.CreateGraphics())' -match $re
>>
pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);
需要注意的是,正则表达式不适用于不支持可变长度lookbehind的语言。但是.NET确实如上所述。
甚至不使用正则表达式(亵渎!):
if (line.Contains(".CreateGraphics(") && !line.Contains("using")) ...
或做一个两遍变体:
lines.Select(l => l.Contains(".CreateGraphics(")).Select(l => !l.Contains("using"))
答案 1 :(得分:0)
这似乎有效。
在文件中查找 - &gt;查找选项 - &gt;使用 - &gt;正则表达式
然后将此正则表达式放入“查找内容: - &gt; ^~(:Wh*using).*CreateGraphics
正则表达式的完整列表 - &gt;
答案 2 :(得分:0)
或者您可以使用命令行工具FINDSTR:
findstr / N / S / C:CreateGraphics * .cs | findstr / V / C:使用
这将为您提供包含“CreateGraphics”但不包含“使用”的所有行的列表。