我已经从这个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(
答案 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/