Регулярное выражение никогда не совпадает - PullRequest
2 голосов
/ 09 октября 2011

В моих файлах журналов есть следующие записи:

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Я не понимаю почему.Я хотел бы эластично обрабатывать эти различные типы записей.Обратите внимание, что с последней записью журнала связан файл дампа.

Ответы [ 2 ]

5 голосов
/ 09 октября 2011

Проблема здесь:

                    + "[.]*" //ignore for now

Точка в "[.]*" соответствует только буквальной точке, она не имеет своего обычного значения «любой символ, не являющийся разделителем строк».Вам нужно ".*"

2 голосов
/ 09 октября 2011

Вы не можете сделать [.]*..* будет достаточно.Вам нужен любой символ, а не точка.

Проверьте свое регулярное выражение здесь: http://regexpal.com/

Начните с очень простого соответствия и начните добавлять сложность по крупицам.для ясности рассмотрим названия ваших групп, например:

^(?<date>\d{2}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}).*(?<type>SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST).*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...