0

我已经小心地将这个 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 上的红宝石 1.9(

4

3 回答 3

1

我相信您的代码中需要多行修饰符:

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

于 2011-07-18T23:26:16.863 回答
1

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

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

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

让它发挥作用的另一个想法是,改变.*. 不要说匹配任何字符,说匹配任何东西,但是\n.

^<DD>([^\n]*\n?[^\n]*)\n
于 2011-07-19T06:02:25.777 回答
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/
于 2011-07-19T06:11:21.910 回答