我需要找到缺少raise
关键字的某些代码块,如下所示:
这些是我要搜索的匹配项
except
FreeAndNil(result);
end;
这些应被忽略:
except
FreeAndNil(result);
raise;
end;
请记住,在except
和end;
关键字之间可以有任意类型或长度的文本。
我尝试了以下正则表达式:except((?!raise).)*end;
,但不适用于多行方案。
我需要找到缺少raise
关键字的某些代码块,如下所示:
这些是我要搜索的匹配项
except
FreeAndNil(result);
end;
这些应被忽略:
except
FreeAndNil(result);
raise;
end;
请记住,在except
和end;
关键字之间可以有任意类型或长度的文本。
我尝试了以下正则表达式:except((?!raise).)*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;
字面上匹配