1

我正在尝试编写一个 Ruby 脚本,该脚本将从图像中获取 Flickr BBCode,并且只找到实际的图像链接并忽略所有其他内容。

Flickr 的 BBCode 如下所示:

<a href="http://www.flickr.com/photos/user/9049969465/" title="Wiggle Wiggle by Anonymous, on Flickr"><img src="https://farm3.staticflickr.com/2864/92917419471_248187_c.jpg" width="800" height="526" alt="Wiggle Wiggle"></a>

我试图让我的输出只是链接,所以:https ://farm3.staticflickr.com/2864/92917419471_248187_c.jpg

到目前为止,我的代码是这样的

#!/usr/bin/ruby

require 'rubygems'

str1 = ""

puts "What text would you like me to use? "
text = gets

text.scan(/"([^"]*)"/) { str1 = $1}

puts str1

我需要知道如何扫描输入,只找到以 https 开头并以引号结尾的部分。任何帮助表示赞赏

4

3 回答 3

2

不要尝试使用 regex 解析 HTML

相反,请使用 HTML 解析器。像Nokogiri http://nokogiri.org/

require 'nokogiri'
doc = Nokogiri::HTML.parse '<a href="http://www.flickr.com/photos/user/9049969465/" title="Wiggle Wiggle by Anonymous, on Flickr"><img src="https://farm3.staticflickr.com/2864/92917419471_248187_c.jpg" width="800" height="526" alt="Wiggle Wiggle"></a>'

doc.css('a').each do |link|
  puts link.attr(:href)
end
于 2013-06-19T19:43:48.703 回答
1

如果您尝试解析 HTML,您应该真正使用适当的 HTML 解析器。

例如,这在Nokogiri中是微不足道的:

require 'nokogiri'

bbcode = %Q[<a href="http://www.flickr.com/photos/user/9049969465/" title="Wiggle Wiggle by Anonymous, on Flickr"><img src="https://farm3.staticflickr.com/2864/92917419471_248187_c.jpg" width="800" height="526" alt="Wiggle Wiggle"></a>]

Nokogiri::HTML(bbcode).css('a')[0]['href']
# => "http://www.flickr.com/photos/user/9049969465/"

您显然必须在其中添加一些错误检查,但这是基础。

于 2013-06-19T19:44:48.467 回答
0
require 'nokogiri'

doc = Nokogiri::HTML (<<-eol)
<a href="http://www.flickr.com/photos/user/9049969465/" title="Wiggle Wiggle by Anonymous, on Flickr"><img src="https://farm3.staticflickr.com/2864/92917419471_248187_c.jpg" width="800" height="526" alt="Wiggle Wiggle"></a>
eol
doc.at_css("a")['href']
# => "http://www.flickr.com/photos/user/9049969465/"
doc.at("a")['href']
# => "http://www.flickr.com/photos/user/9049969465/"
于 2013-06-19T19:49:23.470 回答