Я пытаюсь проанализировать журналы 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
(пробелы)?