查找包含{}的多行,其中不包含某个字符串

时间:2011-11-09 17:58:16

标签: java regex

对于我们的代码库,我需要找到所有不打印stacktrace的catch语句..

这样一条线;

catch (Exception e) { }

catch (Exception e) { 
    Do Something
}

 catch (Exception e) {

 }

虽然不包括字符串“StackTrace”是否包含在{}

之间的任何地方

我是这个

 catch\b\s*\(.*\)\s*\{.*\n*(?!stackTrace).*\n*\}

除了多行之外,似乎主要工作..

有人可以帮忙吗?

由于

编辑:一些失败的例子......它往往会失败;

} catch (NameNotFoundException e) {

    }

适用于此

} catch (JSONException e) {
        }

3 个答案:

答案 0 :(得分:1)

这是我的正则表达(有点难看 - 但它有效!欢迎任何改进)

catch\s*\([^)]*\)[^{]*\{[^}]*StackTrace[^}]*\}

答案 1 :(得分:1)

如果您想进行自动代码检查,您应该查看PMD和checkstyle。

http://pmd.sourceforge.net/

http://checkstyle.sourceforge.net/

事实上,PMD已经为“EmptyCatchBlock”定义了规则

http://pmd.sourceforge.net/rules/basic.html

答案 2 :(得分:0)

我会使用正则表达式查找每个catch(...),然后逐行向下扫描,计算打开/关闭括号,直到catch块结束。在扫描的每一行使用正则表达式检查“StatckTrace”。