REGEX - сопоставление снова нескольких строк
Данный текст как:
XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX.XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX.XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX. XXXXXXX.
Boss: asdasdasdasd
Date: XXX, XXXXXXXXX
Я хочу соответствовать последним 3 строкам:
Вот что я пытаюсь, но у меня ничего не получается:
^Boss:.*$^Date:.*$
Предложения? Спасибо
3 ответа
Возможно, вам придется пропустить первые x строк... также якорь ^, вероятно, заставляет вас не совпадать.
Пытаться
(?:.*[\r\n]*)*Boss:.*(?:.*[\r\n]*)Date:.*
^Boss:.*[\r\n]+Date:.*$
Якоря линии, ^
а также $
, утверждения нулевой ширины; они утверждают, что некоторое условие выполняется без использования каких-либо символов.
^
означает, что текущая позиция является либо началом ввода, либо ему непосредственно предшествует разделитель строк.$
означает, что текущая позиция является либо концом ввода, либо сразу за ним следует разделитель строк.
Но ни один из них не потребляет разделитель строк, поэтому $^
никогда не может сравниться. [\r\n]+
соответствует (и использует) один или несколько возвратов каретки или перевода строки, поэтому он обрабатывает три наиболее распространенных типа разделителя строк: \r
(старый стандарт Mac), \r\n
(Стандарт Windows/ сети) и \n
(Unix/Linux/Mac OS X/ почти все остальное).
Если ваш файл имеет размер не в диапазоне ГБ
ruby -e 'a=File.read("file"); p a.split(/\n/)[-3..-1] '