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