我有一个文本blob,我想根据它们是.png还是.jpg来选择URL。我想根据模式选择整个单词。
例如,在此blob中:
width='17'></a> <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吗?
使用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
-只查找数组中以适当文本结尾的字符串
是的,你可以使用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") }
如果你只想找到以.jpg或.png结尾的url,应该使用这样的模式。
https?://.*?.(?:jpg|png)