0

给定如下文本:

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:.*$

建议?谢谢

4

3 回答 3

2

您可能需要跳过前 x 行...而且您锚定 ^ 可能会导致您不匹配。

尝试

(?:.*[\r\n]*)*Boss:.*(?:.*[\r\n]*)Date:.*
于 2011-02-12T00:55:31.020 回答
2
^Boss:.*[\r\n]+Date:.*$

线锚^$是零宽度断言;他们断言某些条件成立而不消耗任何字符。

  • ^表示当前位置要么是输入的开头,要么紧跟在行分隔符之前。
  • $表示当前位置是输入的结尾,或者紧随其后的是行分隔符。

但是它们都不消耗行分隔符,因此$^永远无法匹配。 [\r\n]+匹配(并使用)一个或多个回车符或换行符,因此它处理三种最常见的行分隔符类型:(\r旧 Mac 标准)、\r\n(Windows/网络标准)和\n(Unix/Linux/Mac OS X/pretty其他一切)。

于 2011-02-12T03:49:50.613 回答
0

如果您的文件大小不在 GB 范围内

ruby -e 'a=File.read("file"); p a.split(/\n/)[-3..-1] '
于 2011-02-12T00:57:28.403 回答