首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用regex解析日志

用regex解析日志
EN

Stack Overflow用户
提问于 2011-06-10 11:27:50
回答 3查看 2K关注 0票数 0

我试图将JBoss日志解析为撤回错误消息等等。这是我使用的模式:([0-9]+-[0-9]+-[0-9][0-9]) .*? ((?:ERROR .*? .*?|WARN .*? .*?)) (.*? .* (?!at).*? .*\sjava.*)

*\sjava.*部件应该在下一行中撤回NullPointer异常。

当我在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 (白空间)?

EN

回答 3

Stack Overflow用户

发布于 2011-06-10 11:32:37

不-你逃过了\s

票数 0
EN

Stack Overflow用户

发布于 2011-06-10 11:37:32

您的正则表达式会产生非常重的贪婪匹配。我觉得你应该少一点贪得无厌

代码语言:javascript
复制
.*

取决于日志文件的大小,它们往往是CPU密集型的.但是,如果没有示例日志,很难确定如何改进正则表达式

票数 0
EN

Stack Overflow用户

发布于 2011-06-10 11:41:10

您可能期望为零或更多空格字符。试试\\s*java.*

编辑:使用多特雷模式。

代码语言:javascript
复制
    String s = "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."
      + "\n\n  java.lang.NullPointerException\n";
    System.out.println(s.matches("(?s)([0-9]+-[0-9]+-[0-9][0-9]) .*? "
      + "((?:ERROR .*? .*?|WARN .*? .*?)) (.*? .* (?!at).*? .*\\sjava.*[\n])"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6305694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档