Я пытаюсь проанализировать записи журнала в приложении C#, используя это регулярное выражение: (^[0-9]{4}(-[0-9]{2}){2}([^|]+\|){3})(?!\1)
для журналов в формате [дата (в некотором формате)] | [уровень] | [appname] | [сообщение].Разбор многострочных записей журнала с использованием регулярного выражения
Где (я думаю):
^
спичках начало строки (включен /г на regex101)[0-9]{4}(-[0-9]{2}){2}
, за которой следует начинать с даты как 2015-03-03([^|]+\|){3})
следует остальным даты, уровень журнала и имя приложения(?!\1)
следует не начало новой записи в журнале (должно быть сообщение)
К примеру, у меня есть следующие записи журнала (разделенные символом новой строки для уточнения):
2015-03-03 19:30:47.2725|INFO|MyApp|This is a single line log message. 2015-03-03 19:31:29.1209|INFO|MyApp|This log message has multiple lines with 2015-03-03 a date in it. 2015-03-03 19:32:50.1106|INFO|MyApp|This log message has multiple lines but just text only. 2015-03-03 19:33:20.2683|ERROR|MyApp|This log message has multiple lines but also some confusing text like 2015-03-03 19:33:20.2683|ERROR| which should still be a valid log message.
Но регулярное выражение не фиксирует сообщение, когда я тестирую его на regex101, возможно, потому, что я не понимаю, как захватить негативный взгляд.
Если я включаю .*
в регулярном выражении: (^[0-9]{4}(-[0-9]{2}){2}([^|]+\|){3}).*(?!\1)
он соответствует сообщение, но только одну строку (потому что .
не соответствует новой строки).
Итак, как я могу захватить (многострочное) сообщение?
какой язык вы используете Вот? существует несколько различных типов регулярных выражений в зависимости от среды, поэтому, пожалуйста, будьте конкретны. – phillip
@phillip Я хочу использовать его в приложении C#, но сначала я попытался заставить его работать, используя PHP-код по умолчанию regex101. –