2013-06-19 3 views
1

Я пытаюсь написать сценарий Ruby, который выведет Flickr BBCode из изображения и только найдет фактическую ссылку на изображение и проигнорирует все остальные вещи.Как найти определенный текст между кавычками

Код BBCode с Flickr выглядит следующим образом:

<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, и заканчивается цитатой. Подсказка:

ответ

2

Не пытайтесь parse HTML with a regex.

Вместо этого используйте парсер 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 
+0

+1, да, чтобы [«Российские хакеры не использовали ваш webapp»] (http://stackoverflow.com/a/1732454/128421). –

+0

Хорошо спасибо. Я даже не знал об этом. Вернемся, чтобы исправить мой код. Спасибо за помощь! – chanman82

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/" 

Вы, очевидно, придется добавить некоторые проверки ошибок там, но это основы.

+2

И, конечно, 'css ('a') [0]' можно упростить до 'at_css ('a')'. –

+0

@ theTinMan да, я сделал то же самое. :) –

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/" 
Смежные вопросы