[PHP] Распарсить лог с возможным переносом строк

Тема в разделе "Регулярные выражения", создана пользователем Горбушка, 13 июл 2015.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.116
    Симпатии:
    2.130
    Всем привет!

    Есть файл log.txt, в котором содержится неeбическая хyйня отчёт о работе ПО. Содержание просто отвратительное:
    Код:
    ДД-ММ ЧЧ:ММ:СС [КАКАЯ-ТО ХЕРНЯ] INFO КАКАЯ-ТО ХЕРНЯ
    НА
    НЕСКОЛЬКО
    СТРОК
    ДД-ММ ЧЧ:ММ:СС [КАКАЯ-ТО ХЕРНЯ] WARNING КАКАЯ-ТО ХЕРНЯ
    Нужно это распарсить...

    Формат немного динамический - часть лога на несколько строк, часть на 1 строку.
    Начинается строка всегда с времени в формате ДД-ММ ЧЧ:ММ:СС, заканчивается чем угодно...

    Подскажите, как реализовать - крайне редко пишу парсеры...
     
  2. lag

    lag

    Регистр.:
    13 окт 2014
    Сообщения:
    194
    Симпатии:
    235
    Ищем строку начинающуюся с даты и далее захватываем строки пока не встретим новую строку начинающуюся с даты.
    Если особо не проверять валидность даты, то для формата ДД-ММ ЧЧ:ММ:СС хватит \d\d-\d\d \d\d:\d\d:\d\d
    PHP:
    preg_match_all('~^\d\d-\d\d \d\d:\d\d:\d\d(?:(?!^\d\d-\d\d \d\d:\d\d:\d\d).+[\r\n]*)+~m'$log$matches);
    var_dump($matches[0]);
     
    latteo и Горбушка нравится это.
Статус темы:
Закрыта.