对于我们的代码库,我需要找到所有不打印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) {
}
答案 0 :(得分:1)
这是我的正则表达(有点难看 - 但它有效!欢迎任何改进)
catch\s*\([^)]*\)[^{]*\{[^}]*StackTrace[^}]*\}
答案 1 :(得分:1)
如果您想进行自动代码检查,您应该查看PMD和checkstyle。
http://checkstyle.sourceforge.net/
事实上,PMD已经为“EmptyCatchBlock”定义了规则
答案 2 :(得分:0)
我会使用正则表达式查找每个catch(...)
,然后逐行向下扫描,计算打开/关闭括号,直到catch块结束。在扫描的每一行使用正则表达式检查“StatckTrace”。