【问题标题】:Searching multiple line text that doesn't contain certain expression搜索不包含特定表达式的多行文本
【发布时间】:2015-01-08 19:57:07
【问题描述】:

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

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

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

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

但似乎这个返回的是 any catch 块,而不是那些 不包含 单词“log”的块。

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

编辑

想要的代码(正则表达式应该返回这个)

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

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

catch (SomeException e)
{
    //Something
}

【问题讨论】:

  • 举个例子会更好。

标签: c# regex string


【解决方案1】:

一个小小的改变会帮助你

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

Regex Demo

所做的更改

  • 而不是使用[\s\S],让我们更具体地使用[^{][^}],它们是否定字符类,不会匹配类中的任何内容。

  • [^}] 移动到前瞻中。现在(?![^}]+log) 确保catch 块内没有log

【讨论】:

  • 感谢您的帮助和解释! :)
【解决方案2】:
catch[^{]*{(?:(?!\blog\b|})[\s\S])*}

使用标志 i 或 ignorecase 试试这个。查看演示。

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

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 2021-11-07
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多