regex-查找不包含子字符串的多行字符串

问题描述 投票:1回答:1

我需要找到缺少raise关键字的某些代码块,如下所示:

这些是我要搜索的匹配项类型

except
  FreeAndNil(result);
end;

虽然这些应为忽略

except
  FreeAndNil(result);
  raise;
end;

请记住,在exceptend;关键字之间可以有任何类型或长度的文本。

我尝试了以下正则表达式:except((?!raise).)*end;,但不适用于多行方案。

regex parsing delphi regex-lookarounds
1个回答
1
投票

与换行符匹配的选项可以通过使用否定先行断言那些行不是以except或end之一开头来匹配except和end之间的所有行。

\bexcept\s*\r?\n(?:(?!(?:except|[\t ]+raise;)$).*\r?\n)*end;

部分

  • [\bexcept\s*\r?\n匹配,但0+空格字符和换行符除外
  • (?:非捕获组
    • (?!负前瞻,断言右边的不是
      • [(?:except|[\t ]+raise;)$)匹配except或1+空格或制表符,然后匹配raise;,后跟字符串的末尾。
    • )关闭前瞻
    • [.*\r?\n匹配整行,然后换行]
  • [)*重复非捕获组0+次
  • end;字面匹配

Regex demo

© www.soinside.com 2019 - 2024. All rights reserved.