正则表达式Notepad ++ OK JDK 1.6 NOK

时间:2013-05-21 08:37:49

标签: java regex java-6

作为实习的一部分,我必须使用正则表达式来解析日志文件。它是Java日志,我在检测异常时遇到问题。

事实上,我的正则表达式适用于Notepad ++但不适用于Java(1.6),matcher.find()需要非常长的时间,最后才能找到0匹配。

这是我的正则表达式:

(.*\bERROR\b.*)\r?\n((\tat|.*[Ee]xception|\t\.\.\.|\r?\n|ORA-).*\r?\n)+(^(?!.*ERROR).+)\r?\n

你知道为什么吗?

感谢。

3 个答案:

答案 0 :(得分:1)

反斜杠\是java编程语言和正则表达式的转义字符。因此,当在java(以及许多其他编程语言)中对正则表达式进行反斜杠时,您必须复制反斜杠。

例如,编写\\s而不是\s作为正则表达式的语法。

答案 1 :(得分:1)

我可以建议你http://www.regexplanet.com/advanced/java/index.html来测试你的regexp,然后有相应的String来构建java regexp对象

答案 2 :(得分:0)

问题是使用^字符,不要忘记用多行标记声明Pattern对象。

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);

非常感谢!你能告诉我为什么要使用它吗?