2015-12-23 2 views
1

У меня есть файл журнала, который я пытаюсь сканировать для шаблонов и подсчитываю количество раз, когда просматриваются определенные шаблоны. Журнал выглядит следующим образом:Как совместить шаблон регулярного выражения несколько раз?


11298 [out] [работник: 83] данные были восстановлены.

11299 [из] [рабочие: 83] END Строительных данных для обува

11299 [из] [рабочие: 83] END Строительных данных для бара

11300 [из] [рабочий: 83] НАЧАТЬ Строительство данных для Baz

11301 [ERR] [рабочий: 83] Путин бомбил Сирию


Я заинтересован во всех линиях, начиная с [выход] и содержащий END, НАЧАТЬ или перестроены (необходимо COUN т их отдельно). Так я думал, что следующее регулярное выражение

(out.*END)*

будет соответствовать патч шаблон out] anything here END несколько раз, но это только дает мне первый экземпляр out в моем файле и останавливается. Может ли кто-нибудь указать мне в правильном направлении?

Я делаю это в MATLAB с синтаксисом regexp(txt,expr,'start')

+1

Я сам нашел ответ. Поведение '.' По умолчанию в regex MATLAB отличается от стандартного (оно включает в себя новую строку), и есть опция '' dotexceptnewline '', которая может использоваться для переключения на стандартное поведение. –

+0

Пятнистый комментарий после публикации ответа. Рад, что ты это нашел. – scope

ответ

2

Вот документ: http://www.mathworks.com/help/matlab/ref/regexp.html

regexp по умолчанию возвращает все матчи.

Попробуйте сыграть с опциями и outkeys (передано как третий аргумент). Похоже, что это могло бы помочь: 'dotexceptnewline' - ваше регулярное выражение жадное и, вероятно, совпадает со всем (начиная с первого out до последнего END).

Попробуйте использовать ключ 'match' вместо 'start'.

Также проверьте, не урезаны ли ваши результаты по ошибке.

Смежные вопросы