捕获文本中的Rubular / Ruby差异

时间:2011-07-18 23:23:53

标签: ruby regex rubular

我已经从这个Rubular窗口http://rubular.com/r/YH8Qj2EY9j小心地剪切并粘贴到我的代码中,但是我得到了不同的结果。 Rubular匹配捕获是我想要的。然而

desc_pattern = /^<DD>(.*\n?.*)\n/
if desc =~ desc_pattern
    puts description = $1 
end

只给我第一行,即

<DD>@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />

我不认为这是我的测试数据,但这是可能的。我错过了什么?

(Ubuntu 10.10上的ruby 1.9(

3 个答案:

答案 0 :(得分:1)

我相信您需要在代码中使用多行修饰符:

/ m多线模式:点匹配换行符,^和$都匹配行开头和结尾。

答案 1 :(得分:1)

将测试数据粘贴到能够显示控制字符并验证换行符的编辑器中。通常它在Linux系统上应该只有\n和你的正则表达式一样。 (几周前我有不寻常的线路,不知道为什么。)

您可以执行的另一项检查是更改括号并打印捕获组。这样你就可以看到正则表达式的哪一部分符合什么。

/^<DD>(.*)\n?(.*)\n/

让这个工作起作用的另一个想法是,改变.*。不要说匹配任何字符,比如匹配任何字符,但\n

^<DD>([^\n]*\n?[^\n]*)\n

答案 2 :(得分:1)

以下内容:

#!/usr/bin/env ruby

desc= '<DD>@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />
– Johnny Badhair (8spiders) http://twitter.com/8spiders/status/92876473853157377
<DT>la la this should not be matched oh good'
desc_pattern = /^<DD>(.*\n?.*)\n/
if desc =~ desc_pattern
    puts description = $1 
end

打印

@mathpunk Griefing (i.e. trolling) as Play: http://t.co/LwOH1Vb<br />
– Johnny Badhair (8spiders) http://twitter.com/8spiders/status/92876473853157377

在我的系统上(Linux,Ruby 1.8.7)。

也许你的换行符真的是\r\n(Windows风格)?如果你尝试怎么办?

desc_pattern = /^<DD>(.*\r?\n?.*)\r?\n/