Я настраиваю регулярное выражение для поиска исключений нулевого указателя в журналах. Регулярное выражение для этого очень просто:
(java\.lang\.NullPointerException)
И это возвращает три группы из моих журналов:
2020-01-31 00:00:01 - Searching for account details
Error:
java.lang.NullPointerException
2020-01-31 00:00:30 - Searching for account details
Error:
java.lang.NullPointerException
2020-01-31 00:00:50 - Searching for account details
Error:
java.lang.NullPointerException
Что я хотел бы сделать, это настроить, чтобы возвращать результаты только в том случае, если существует более определенного числа подходящих групп. Например, (java .lang.NullPointerException) {2,} теоретически должно возвращать результаты для двух или более групп, тогда как {4,} не должно совпадать. До сих пор я читал об использовании фигурных скобок для этого, но я не смог заставить это работать с чем-либо, кроме {1,} - все остальное просто не возвращает совпадений.
РЕДАКТИРОВАТЬ: Спасибо Павлу за ответ. Я сделал небольшую модификацию для моего варианта использования:
(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s-\sSearching\sfor\saccount\sdetails\nError:\njava\.lang\.NullPointerException[\s\S]){10,}
Этот шаблон должен точно соответствовать этому сообщению от даты до ошибки нулевого указателя. Я также удалил *
из [\s\S]
, чтобы он улавливал только 10 последовательных ошибок. Таким образом, если есть 10 или более экземпляров:
2020-01-31 00:00:01 - Searching for account details
Error:
java.lang.NullPointerException
, он вернет совпадение. Но если есть что-то вроде:
2020-01-31 00:00:50 - Searching for account details
Error:
java.lang.NullPointerException
2020-01-31 00:00:50 - Searching for account details
Found something:
Hello world
2020-01-31 00:00:50 - Searching for account details
Error:
java.lang.NullPointerException
Совпадение не будет возвращено из-за сообщения hello world
между сообщениями. Я не задумывался об этом сценарии использования до тех пор, пока не установлю факт, поэтому я не включил его в исходный вопрос.