我想解析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