【发布时间】:2011-09-12 10:30:47
【问题描述】:
我正在尝试解析 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(空格)?
【问题讨论】:
-
举个日志例子。您可能在正则表达式中有一个杂散空间