正则表达式 - 查找不包含子字符串的多行字符串
regex - find multiline string that does not contain substring
我需要找到某些缺少 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;
字面匹配
我需要找到某些缺少 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;
字面匹配