2012-02-03 23 views
1

我有一個文本blob,我想根據它們是否具有.png或.jpg來選擇URL。我想根據模式選擇整個單詞。根據模式在紅寶石文本blob中選擇一個詞

例如該Blob:

width='17'></a>&nbsp;<a href='http://click.e.groupon.com/? qs=94bee0ddf93da5b3903921bfbe17116f859915d3a978c042430abbcd51be55d8df40eceba3b1c44e'  style=\"text-decoration: none;\">\n<img alt='Facebook' border='0' height='18' src='http://s3.grouponcdn.com/email/images/gw-email/facebook.jpg' style='display: i 

我想選擇圖像:

http://s3.grouponcdn.com/email/images/gw-email/facebook.jpg

能否在HTML文本BLOB引入nokogiri使用?

回答

2

是的,你可以使用nokogiri,你應該!

這裏有一個簡單的片斷:

require "nokogiri" 
str = "....your blob" 
html_doc = Nokogiri::HTML(str) 
html_doc.css("a").collect{|e| e.attributes["href"].value}.select{|e| e.index(".png") || e.index(".jpeg") } 
+0

我將「a」改爲「img」,將「href」改爲「src」,但這個效果很好,謝謝! – hagope 2012-02-03 10:26:23

+0

您可能想要使用'Nokogiri :: HTML.fragment()'來更簡單,更準確地表示內容。 – Phrogz 2012-02-03 18:11:38

-1

如果您只想查找以.jpg或.png結尾的網址,應該這樣做。

https?:\/\/.*?\.(?:jpg|png) 
+0

這會失敗,如果你有例如'foo',因爲它會從第一個http捕獲直到png。 – Phrogz 2012-02-03 18:12:53

4

使用引入nokogiri和XPath:

frag = Nokogiri::HTML.fragment(str) # Don't construct an entire HTML document 
images = frag.xpath('.//img/@src').map(&:text).grep /\.(png|jpg|jpeg)\z/ 

中的XPath說:

  • .// - 在這個片段
  • img任何地方 - 找到全部爲<img>個元素
    • /@src - 現在發現的每個

src屬性然後我們:

  • map(&:text) - 將所有的Nokogiri::XML::Attr的屬性值。
  • grep - 僅查找以相應文本結尾的數組中的那些字符串。
+0

這是非常有啓發性的元感謝! – hagope 2012-02-03 22:21:02