正则表达式来查找没有using块的CreateGraphics调用
本文关键字:块的 CreateGraphics 调用 using 查找 正则表达式 | 更新日期: 2023-09-27 18:21:57
我的任务是在我们的代码库中查找所有对CreateGraphics的调用,这些调用没有被using块包围,并在它们周围添加using块。
我知道我可以用正则表达式找到这些,但我需要一些语法方面的帮助。
我需要一个regex,它可以与Visual Studio 2010的"在文件中查找"对话框一起使用,该对话框将使用查找包含CreateGraphics但不是以开头的任何行。
匹配此项:
pnlSearchAndBrowseButton.CreateGraphics().DrawLine(lineLight, 2, h - 1, w - 1, h - 1);
但不是这个:
using (Graphics g = label.CreateGraphics())
任何一行的开头可能有空格,也可能没有空格。
注意: 不再相关,因为问题描述发生了重大变化。在我看来,这仍然是解决实际问题的可行方案
(?<!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);
需要注意的是,正则表达式在不支持可变长度查找的语言中不起作用。但是.NET确实如此,正如上面所看到的。
或者甚至不使用正则表达式(亵渎!):
if (line.Contains(".CreateGraphics(") && !line.Contains("using")) ...
或者做两遍变体:
lines.Select(l => l.Contains(".CreateGraphics(")).Select(l => !l.Contains("using"))
这似乎有效。
在文件中查找->查找选项->使用->正则表达式
然后将此正则表达式放入"查找内容:->^~(:Wh*using).*CreateGraphics
"
正则表达式的完整列表->
http://msdn.microsoft.com/en-us/library/2k3te2cs.aspx
或者您可以使用命令行工具FINDSTR:
findstr/N/S/C:CreateGraphics*.cs|findstr/V/C:使用
这将为您提供一个包含"CreateGraphics"但不包含"using"的所有行的列表。