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] '
Другие вопросы по тегам