2011-11-09 47 views
0

对于我们的代码库,我需要找到所有不打印堆栈跟踪的catch语句..找到了一些包含与{线}不包括某些字符串

所以这样一行;

catch (Exception e) { } 

catch (Exception e) { 
    Do Something 
} 

catch (Exception e) { 

} 

而如果字符串 “堆栈跟踪” 是{}

我有这个

之间的任何地方包括不包括
catch\b\s*\(.*\)\s*\{.*\n*(?!stackTrace).*\n*\} 

这似乎是多数工作,除了多条线..

任何人都可以帮忙吗?

谢谢

编辑:一些故障的例子..它倾向于失败;

} catch (NameNotFoundException e) { 

    } 

它适用于这个

} catch (JSONException e) { 
     } 
+0

什么语言是你的脚本来完成解析中定义的规则? – corsiKa

+0

在我看来,正在扫描的语言是Java,但扫描的内容是什么?取决于您的平台和正则表达式选项,一些成功/失败示例将会很好 – Borodin

+0

。可能不符合\ n。所以你似乎在寻找文字,然后是\ n *,然后不是“stackTrace”,后面是文字,后面是\ n *。我认为你的意思是文本部分也包括\ n's。所以对我来说,你似乎需要说一些像“{[。\ n] *(?!stackTrace)[。\ n] *} –

回答

0

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

+0

这是我不得不做的 –

1

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

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

如果在catch块中有花括号*怎么办? – NullUserException

+0

然后你会有使用正则表达式的问题,无论如何,你不能使用正则表达式来平衡大括号(或任何事)。它的表现力至关重要。所以如果你也想分析一下这个,你需要一个更像上下文无关语法的东西。 –

+0

@NullUserExceptionఠ_ఠ:我刚刚为Wonder问的问题创建了一个正则表达式。你是对的 - 它不会在{} – Fischermaen