0

给定如下文本:

body = 

yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada yada 
< via mobile device > 

Yada Yada <xxxxx@xxxxx.com> wrote:

yada yada yada yada yada yada yada yada yada 

我想匹配第二段,所以我在做:

body = body.split(/.* <xxxxx@xxxxx.com> wrote: .*/m).first

但这在 ruby​​ 中并不匹配,即使它在 Rubular 中也是如此。任何想法为什么?谢谢

4

2 回答 2

1

线

Yada Yada <xxxxx@xxxxx.com> wrote:

确实以换行符结尾,而不是空格。所以你的正则表达式应该是:

/.* <xxxxx@xxxxx.com> wrote:\n.*/m

注意:Windows 系统和一些协议如 HTML 可以使用不同的换行编码。如果要确保兼容,请先将输入转换为 unix 换行编码,然后再进行数据提取。您可以为此使用我的换行宝石

于 2011-03-05T05:05:06.183 回答
1

试试这个:

body = body.split(/.*<xxxxx@xxxxx.com> wrote:.*/).first

第一个之后的空格.*是无用的,并且(正如@aef 指出的)第二个 .*之前的空格是错误的(也许你的 rubular 测试中有一个空格)。

请注意,我也删除了m修饰符。如果我没有,正则表达式将匹配整个字符串,从而产生一个空数组。这就是 Ruby 所说的多行模式(其他人都称之为单行全点模式):.匹配任何内容,包括换行符。

编辑:在 ideone.com 上查看

于 2011-03-05T05:18:22.253 回答