在执行string.scan时如何允许多行

时间:2012-02-10 05:07:41

标签: ruby

以下是我要浏览的html的摘录。

<div class="text">
 <h3>
  <a href="http://www.faith.co.uk/">
   Rodeo Sinclair
  </a>
 </h3>

这是我的红宝石代码。

@doc = open(url) { |f| 
  @doc = f.read
}

output = @doc.scan(/<h3><a href=(.*?)>/) 

由于html文件中的新行和空格,这不起作用。无论如何我可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我可以轻松创建一个解析HTML片段的正则表达式。

但是,我想鼓励您养成使用XML / HTML解析器与HTML交互的习惯。

require 'nokogiri'
require 'open-uri'

doc = Nokogiri::HTML(open(url))

output = doc.css('div h3 a').each do |link|
    puts link.attr("href")
end

请参阅RegEx match open tags except XHTML self-contained tags,了解使用正则表达式解析HTML的令人信服的论点。

== EDIT ==更改为每个循环

答案 1 :(得分:1)

为匹配添加(可选)空格:

@doc.scan(/<h3>\s*<a href=(.*?)>/)