Регулярное выражение для поиска вызовов CreateGraphics, у которых нет блока using - PullRequest
0 голосов
/ 31 января 2012

Мне было поручено найти все вызовы CreateGraphics в нашей кодовой базе, которые не заключены в блок использования, и добавить вокруг них блоки использования.

Я знаю, что могу найти их с помощью регулярного выражения, но мне нужна помощь с синтаксисом.

Мне нужно регулярное выражение, которое я могу использовать с Диалоговое окно поиска в файлах Visual Studio 2010, которое найдет любую строку, содержащую CreateGraphics , которая не начинается с с использованием .

Соответствует этому:

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

Но не это:

  using (Graphics g = label.CreateGraphics())

Любая строка может иметь или не иметь пробелов в начале.

Ответы [ 3 ]

1 голос
/ 31 января 2012

Примечание: Больше не актуально, так как описание проблемы изменилось довольно существенно.Я все еще оставлю это здесь, поскольку это (на мой взгляд) все еще жизнеспособное решение актуальной проблемы.


(?<!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"))
0 голосов
/ 31 января 2012

Или вы можете использовать инструмент командной строки FINDSTR:

findstr / N / S / C: CreateGraphics * .cs |findstr / V / C: использование

Это даст вам список всех строк, которые содержат «CreateGraphics», но не «using».

0 голосов
/ 31 января 2012

Это похоже на работу.

Поиск в файлах -> Параметры поиска -> Использование -> Регулярные выражения

Затем поместите это регулярное выражение в "Найти что: -> ^~(:Wh*using).*CreateGraphics

Полный список регулярных выражений ->

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

...