正则表达式-查找不包含子字符串的多行字符串

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

这些是我要搜索的匹配项

except
  FreeAndNil(result);
end;

这些应被忽略

except
  FreeAndNil(result);
  raise;
end;

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

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

zpengibm 回答:正则表达式-查找不包含子字符串的多行字符串

与换行符匹配的选项可以通过使用否定的前行断言匹配这些行,而不是所有它们之间的行:

\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

本文链接:https://www.f2er.com/2969171.html

大家都在问