2011-03-08 43 views
0

我希望能夠匹配兩個標籤之間的文本,從開始標籤開始到結束標籤結束。解析文本以在Ruby 1.9.x中查找html標籤

說我有一個名爲「文本」變量文本塊:

some text some text some text some text some text 
<some_tag> 
    some text some text some text some text some text 
</some_tag> 
some text some text some text some text some text 

我想,直到它找到一個開始標記,在這種情況下,「some_tag」解析內容「文本」無爲,一旦它找到一個開始標籤,我希望它能夠捕捉所有內容,直到標籤關閉。

我一直在玩弄塊和正則表達式大約一個小時,似乎無法找出解決這個問題的好方法。

我會感謝任何和所有的指針,謝謝!

回答

2

您應該使用HTML解析器。正則表達式和HTML往往會形成不穩定的混合,導致大劑量的瘋狂。

使用Nokogiri

require 'nokogiri' 

html = <<EOT 
some text some text some text some text some text 
<p> 
    some text some text some text some text some text 
</p> 
some text some text some text some text some text 
EOT 

doc = Nokogiri::HTML::DocumentFragment.parse(html) 

puts doc.search('p').map { |n| n.inner_text } 

>> some text some text some text some text some text 

這是通過HTML片段搜索,尋找<p>標籤。對於每一個它發現它會提取內部文本。

我使用的是Nokogiri的CSS模式,通過使用"p"。我可以使用XPath,但CSS可以被更多人理解。

+0

謝謝,我已經多次看過Nokogiri,但我迄今發現文檔非常差。但這正是我從nokogiri.org網站直接看到的。你有什麼好的參考?謝謝! – Ben 2011-03-08 01:08:19

+0

@Rhinoo,文檔不錯。至少他們擁有它們,這比Ruby的一些核心庫要多得多。你最好的選擇是閱讀他們的教程,瀏覽他們網站上的所有文檔,然後在Nokokiri-Talk郵件列表中搜索有趣的主題。他們的郵件列表是他們的主要支持,也是開發人員監控的地方,因此您將得到非常好的例子,說明如何直接從最瞭解它的人那裏做事。 – 2011-03-08 02:35:16

+0

@Rhinoo,如果這回答你的問題,一定要標記答案。謝謝。 – 2011-03-08 02:46:43