我想解析JBoss日誌來檢索錯誤消息等。 這是我使用的模式: ([0-9]+-[0-9]+-[0-9][0-9]) .*? ((?:ERROR .*? .*?|WARN .*? .*?)) (.*? .* (?!at).*? .*\sjava.*)
用正則表達式解析日誌
的*\sjava.*
部分應該是中檢索空指針異常下一行。
當我在http://www.regexplanet.com/simple/上測試它(選中UNIX_LINES選項)時,一切正常。但是,當我在java代碼中使用相同的模式時,沒有什麼是輸出,我的程序凍結。 Pattern p = Pattern.compile("([0-9]+-[0-9]+-[0-9][0-9]) .*? ((?:ERROR .*? .*?|WARN .*? .*?)) (.*? .* (?!at).*? .*\\sjava.*)", Pattern.UNIX_LINES);
當我從模式中刪除\sjava.*
時,一切也都正常。
這是從日誌文件的示例:
2011-06-08 03:28:48,408 INFO [STDOUT] (http-exxample.com%2F10.8.238.48-8180-7) 2011-06-08 03:28:48,403 WARN [http-example.com%2F10.8.238.48-8180-7] interceptors.WebFault (WebFault.java:125) - Exception occurred while writing fault.
java.lang.NullPointerException
一切都在除java.lang.NullPinterException
單行。
java是否需要任何特殊的方式轉義\s
(空格)?
給出一個日誌的例子。您可能在正則表達式中有一個流浪空間 – Bohemian 2011-06-10 11:34:31
已添加示例。 – ddario 2011-06-10 11:48:08