正则表达式,用于查找没有使用块的CreateGraphics调用

时间:2012-01-31 17:10:05

标签: c# .net regex gdi+

我的任务是在我们的代码库中找到所有对CreateGraphics的调用,这些调用没有被using块包围并在它们周围添加块。

我知道我可以用正则表达式找到它们,但我需要一些语法帮助。

我需要一个可以与 Visual Studio 2010的“在文件中查找”对话框一起使用的正则表达式,该对话框将找到包含 CreateGraphics 的任何行,该行不以开头

匹配这个:

  pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);

但不是这样:

  using (Graphics g = label.CreateGraphics())

任何一行都可能在开头有空格,也可能没有空格。

3 个答案:

答案 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;

http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx

答案 2 :(得分:0)

或者您可以使用命令行工具FINDSTR:

findstr / N / S / C:CreateGraphics * .cs | findstr / V / C:使用

这将为您提供包含“CreateGraphics”但不包含“使用”的所有行的列表。