作为实习的一部分,我必须使用正则表达式来解析日志文件。它是Java日志,我在检测异常时遇到问题。
事实上,我的正则表达式适用于Notepad ++但不适用于Java(1.6),matcher.find()需要非常长的时间,最后才能找到0匹配。
这是我的正则表达式:
(.*\bERROR\b.*)\r?\n((\tat|.*[Ee]xception|\t\.\.\.|\r?\n|ORA-).*\r?\n)+(^(?!.*ERROR).+)\r?\n
你知道为什么吗?
感谢。
答案 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);
非常感谢!你能告诉我为什么要使用它吗?