2011-04-11 30 views
2

我需要一個正則表達式來獲取整個異常名稱。來自stacktrace的點和它之前的空白。正則表達式匹配完整異常名稱

Time: Sun Apr 10 20:36:57 CEST 2011 
Message: java.lang.NullPointerException 
    at com.hello.World.Hi.initDB(bla.java:273) 
+0

你使用哪種語言? – StKiller 2011-04-11 13:22:35

+0

Hi..I使用groovy和Java – Natta 2011-04-11 13:24:27

+0

StKiller,真的嗎? 「java.lang。*」 – halfdan 2011-04-11 13:24:49

回答

0

事情是這樣的:

String test = "Time: Sun Apr 10 20:36:57 CEST 2011\nMessage: java.lang.NullPointerException\n at com.hello.World.Hi.initDB(bla.java:273)"; 
Pattern check = Pattern.compile(".*Message:(\\s[\\w\\.]*)"); 
Matcher checker = check.matcher(test); 
while(checker.find()) 
{ 
    System.out.println(checker.group(1)); 
} 

輸出

java.lang.NullPointerException 

UPDATE

好吧,如果你想匹配 「異常」 二字 - 有一種方法:

String test = "Time: Sun Apr 10 20:36:57 CEST 2011\nMessage: java.lang.NullPointerException\n at com.hello.World.Hi.initDB(bla.java:273)"; 
Pattern check = Pattern.compile("(\\s[\\w\\.]*Exception)"); 
Matcher checker = check.matcher(test); 
while(checker.find()) 
{ 
    System.out.println(checker.group(1)); 
} 
+0

那麼,如果你不知道在java.lang.NullPointerException之前和之後發生了什麼 - 沒有辦法匹配它,因爲[\\ w \\。]將匹配任何類型爲「aaa.AAAA ....」的數據..「 – StKiller 2011-04-11 13:41:11

+0

但有stil的方式來匹配它..異常是不是? – Natta 2011-04-11 13:47:25

+0

請看最新的答案。 – StKiller 2011-04-11 13:51:35

0

'Message'是否總是作爲異常的前綴?如果是這樣,那麼這將搶例外成捕獲組你:

Message:(\s[a-zA-Z\.]*) 

我不是從你的問題不確定是否需要之前要不要捕捉空間 - 如果你不這樣做,然後刪除來自此正則表達式的\s

如果你的異常遵循慣例(即:始終與例外後綴),那麼你可以簡單地這樣做:

([a-zA-Z\.]*Exception) 
+0

不,它可能是空白之前的任何東西 – Natta 2011-04-11 13:40:58

+0

@Natalia Naumova:我已經更新了我的答案。如果這些解決方案不可行,那麼最好再發布一些運行正則表達式所需的文本示例。 – Town 2011-04-11 13:46:54

+0

謝謝,你是最棒的! :) – Natta 2011-04-11 13:58:03