2011-02-12 42 views
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

为什么它必须用正则表达式来完成?只需换行就行了。 – 2011-02-12 00:38:24

回答

2

您可能需要跳过第一个X线......你也锚^可能是造成你不匹配。

尝试

(?:.*[\r\n]*)*Boss:.*(?:.*[\r\n]*)Date:.* 
0

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

ruby -e 'a=File.read("file"); p a.split(/\n/)[-3..-1] ' 
2
^Boss:.*[\r\n]+Date:.*$ 

线锚,^$,都是零宽度断言;他们断言某些条件适用于不消费任何字符。

  • ^表示当前位置或者是输入的开始位置,或者它紧接在行分隔符后面。
  • $装置的当前位置或者是输入的结束,或者它紧跟一个行分隔符。

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