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

时间:2015-01-08 11:43:00

标签: c# regex string

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

我们发现我们的几个try / catch块都缺少此记录器。我想创建一个正则表达式,找出那些包含catch块而没有调用Logger类的块的位置。

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

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

但似乎这个会返回任何 catch块而不是那些不包含单词'log'的块。

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

修改

通缉代码(正则表达式返回此内容)

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

错误代码(正则表达式应该返回此内容)

catch (SomeException e)
{
    //Something
}

2 个答案:

答案 0 :(得分:2)

一个小改动可以帮助你

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

Regex Demo

所做的更改

  • 使用[\s\S]而不是使用[^{][^}]更加具体,这些是否是与类中任何东西都不匹配的否定字符类。

  • [^}]移至前方。现在(?![^}]+log)确保log块中没有catch

答案 1 :(得分:0)

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

尝试使用标记i或ignorecase。参见演示。

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