#java #regex
#java #регулярное выражение
Вопрос:
В моих файлах журнала есть следующие записи:
09-22-11 12:35:09 1ms INFO ...erChangeSetListener:91 11 processing changeSet for class:4328,at version:1316720109100
09-22-11 12:35:09 779ms INFO ...erChangeSetListener:91 11 processing changeSet for class:4334,at version:1316720109882
09-22-11 12:35:09 1ms INFO ...erChangeSetListener:91 11 processing changeSet for class:4328,at version:1316720109882
09-22-11 12:35:11 1s WARNING QueryServiceImpl:100 - no existing index for class:4328
09-22-11 12:35:11 SEVERE QueryRequest:107 7 Aod query resulted in error:No index available for class:4328
09-22-11 12:35:11 SEVERE AuthenticationTask:48 - EndUserException: an error occurred when processing the query Dump: /data1/amir/dev/devots/logs/dumps/22i123511.dump
к которому я применяю это регулярное выражение :
final String pattern = "^(\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})" //date
"[.]*" //ignore for now
"(SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST)" //severity
"[.]*"; //ignore the rest for now
final Pattern regex = Pattern.compile(pattern);
final Matcher m = regex.matcher(currentLine);
if (m.matches()) {
for (int i = 1; i <= m.groupCount(); i ) {
System.out.format("[%d] "%s"%n", i, m.group(i));
}
}
Но мои совпадения никогда не возвращают true. Я не понимаю, почему. Я бы хотел устойчиво обрабатывать эти разные типы записей. Обратите внимание, что с последней записью журнала связан файл дампа.
Комментарии:
1. Помимо конкретного вопроса, ваши журналы, похоже, имеют формат фиксированного столбца. Почему бы вам просто не создать подстроку по индексу?
Ответ №1:
Проблема здесь:
"[.]*" //ignore for now
Точка в "[.]*"
соответствует только буквальной точке, она не имеет обычного значения «любой символ, не разделяющий строки». Вам нужно ".*"
Ответ №2:
Вы не можете сделать [.]*
. .*
будет достаточно. Вам нужен любой символ, а не точка.
Проверьте свое регулярное выражение здесь: http://regexpal.com /
Начните с очень простого соответствия и начните постепенно усложнять.
Кроме того, для ясности рассмотрите возможность присвоения имен вашим группам следующим образом:
^(?<date>d{2}-d{2}-d{2} d{2}:d{2}:d{2}).*(?<type>SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST).*
Комментарии:
1. Спасибо за рекомендацию regexpal.com , очень удобно визуализировать материал в режиме реального времени.