搜索不包含特定表达式的多行文本

Searching multiple line text that doesn't contain certain expression

我们在程序中记录处理异常的方式是在 catch 块上调用我们的 Logger class。

我们发现我们的几个 try/catch 块缺少这个记录器。我想创建一个正则表达式来找出那些包含 catch 块的块在哪里而不调用 Logger class.

由于我对正则表达式的了解有限,我想到了这个:

catch[\s\S]+?{[\s\S]+?(?!log)[\s\S]+?}

但似乎这个 returns any catch 块而不是那些 不包含 单词 'log' 在他们里面。

我做错了什么/我该如何修复我的正则表达式?

编辑

需要的代码(正则表达式应该不是return这个)

catch (SomeException e)
{
    Log(e);
}

错误代码(正则表达式应该 return 这个)

catch (SomeException e)
{
    //Something
}

一个小小的改变会帮助你

/catch[^{]+{(?![^}]+log)[^}]+}/i

Regex Demo

所做的更改

  • 而不是使用 [\s\S] 让我们使用 [^{][^}] 更具体一点,它们是否定字符 classes,它们不会匹配任何内容class.

  • [^}]移到展望中。现在 (?![^}]+log) 确保 catch 块中没有 log

catch[^{]*{(?:(?!\blog\b|})[\s\S])*}

用标志 i 或 ignorecase.See 演示试试这个。

https://regex101.com/r/sH8aR8/29