Я сомневаюсь, что функциональность GExperts Regex позволяет выполнять поиск за пределами разделителей строк.
Если вы не возражаете против использования такого компонента, как TPerlRegEx, следующий код должен помочь вам начать собственный поиск.
var
emptyExceptBlock: TPerlRegEx;
Results: TStringList;
emptyExceptBlock := TPerlRegEx.Create(nil);
emptyExceptBlock.RegEx := except\s+((//.*|/\*.*\*/|\(\*.*\*\))\s+)*end;
emptyExceptBlock.Options := [preExtended];
emptyExceptBlock.Subject := LoadFromFile('YourFile.pas');
Results := TStringList.Create;
if emptyExceptBlock.Match then begin
repeat
Results.Add(emptyExceptBlock.MatchedExpression);
until not emptyExceptBlock.MatchAgain;
end;
Регулярное выражение должно быть изменено так же, как и встроенные комментарии, такие как «// игнорировать все исключения» - технически это по-прежнему пустой обработчик исключений. – mghie
@mghie: Я скорректировал регулярное выражение для соответствия //,/* */и (* *). Я оставил вложенные комментарии в качестве упражнения для тех, кто хочет зайти так далеко. –
Отличное решение! Да, в последней версии GExpert все еще есть ограничения. Было бы очень интересной особенностью, если бы GExpert мог выполнять некоторые простые задачи анализа статического кода, используя TPerlRegEx. (даже если есть ложные срабатывания) – mjn