REGEX - сопоставление снова нескольких строк - PullRequest
0 голосов
/ 12 февраля 2011

Приведенный текст выглядит так:

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 ]

2 голосов
/ 12 февраля 2011
^Boss:.*[\r\n]+Date:.*$

Якоря линии ^ и $ являются утверждениями нулевой ширины; они утверждают, что некоторое условие выполняется без использования каких-либо символов.

  • ^ означает, что текущая позиция является либо началом ввода, либо ему непосредственно предшествует разделитель строк.
  • $ означает, что текущая позиция является либо концом ввода, либо за ним сразу следует разделитель строк.

Но ни один из них не потребляет разделитель строк, поэтому $^ никогда не сможет совпадать. [\r\n]+ соответствует (и использует) один или несколько символов возврата каретки или перевода строки, поэтому он обрабатывает три наиболее распространенных типа разделителя строк: \r (более старый стандарт Mac), \r\n (стандарт Windows / сетевой стандарт) и \n (Unix / Linux / Mac OS X / почти все остальное).

2 голосов
/ 12 февраля 2011

Возможно, вам придется пропустить первые x строк ... также ваш якорь ^, вероятно, заставляет вас не соответствовать.

0 голосов
/ 12 февраля 2011

Если ваш файл имеет размер не в диапазоне ГБ

ruby -e 'a=File.read("file"); p a.split(/\n/)[-3..-1] '
...