2011-11-09 106 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