3

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

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

这是我的正则表达式:

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

你知道为什么吗 ?

谢谢。

4

3 回答 3

1

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

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

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

于 2013-05-21T09:33:09.957 回答
1

我可以推荐你http://www.regexplanet.com/advanced/java/index.html来测试你的正则表达式,然后有相应的字符串来构建 Java 正则表达式对象

于 2013-05-21T08:59:29.087 回答
1

反斜杠\既是 Java 编程语言的转义字符,又是正则表达式的转义字符。因此,当 Java(和许多其他编程语言)中的正则表达式使用反斜杠时,您必须复制反斜杠。

例如 write\\s而不是\sas 要求正则表达式的语法。

于 2013-05-21T08:41:41.930 回答