2012-02-10 4 views
0

ここでは、スキャンしたいhtmlの抜粋を示します。string.scanを実行するときにmuliple行を許可する方法

<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

私は簡単にHTMLフラグメントを解析します正規表現を作成することができます。

しかし、HTMLと対話するためにXML/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 ==各ループに変更されました

+0

ありがとうございます、これはHTMLのパターンのすべてのインスタンスを取得しますか? – bolshevik

+0

@bolshevik各ループに変更して、各一致するリンクのhrefを取得する方法を示しました – ironchefpython

1

は一致する(オプション)スペースを追加します。

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