Это старый, но хорошо, вопрос. Вот ответ, который опирается на Руби встроенный в URI:
require 'set'
require 'uri'
text = '@BreakingNews: Typhoon Morakot hits Taiwan, China evacuates thousands http://news.bnonews.com/u4z3'
schemes_regex = /^(?:#{ URI.scheme_list.keys.join('|') })/i
URI.extract(text).each do |url|
text.gsub!(url, '') if (url[schemes_regex])
end
puts text.squeeze(' ')
и прошел через IRB, показывая, что происходит, и полученный результат:
Я определил текст для поиска:
irb(main):004:0* text = '@BreakingNews: Typhoon Morakot hits Taiwan, China evacuates thousands http://news.bnonews.com/u4z3'
=> "@BreakingNews: Typhoon Morakot hits Taiwan, China evacuates thousands http://news.bnonews.com/u4z3"
Я определил регулярное выражение схем URI, на которые мы хотим реагировать. Это оборонительный ход, потому что URI возвращает ложноположительный в шаге поиска:
irb(main):006:0* schemes_regex = /^(?:#{ URI.scheme_list.keys.join('|') })/i
=> /^(?:FTP|HTTP|HTTPS|LDAP|LDAPS|MAILTO)/i
Пусть URI ходить по тексту находя URL. Для каждого найденного, если это схема, мы хотим, чтобы реагировать на Зачистите все его вхождения из текста:
irb(main):008:0* URI.extract(text).each do |url|
irb(main):009:1* text.gsub!(url, '') if (url[schemes_regex])
irb(main):010:1> end
Эти URL-адреса URI.extract
найдено. Он ошибочно сообщает BreakingNews:
из-за отставания :
. Я думаю, что это не слишком сложное, но для обычного использования, это хорошо:
=> ["BreakingNews:", "http://news.bnonews.com/u4z3"]
Показать, что полученный текст был:
irb(main):012:0* puts text.squeeze(' ')
@BreakingNews: Typhoon Morakot hits Taiwan, China evacuates thousands
Это не кажется вы читаете этот вопрос вообще. – hobodave
@hobodave: Я попробовал еще раз, и на этот раз, похоже, я неправильно понял вопрос в последний раз. Я предположил, что был задействован плохой английский, и он хочет получить текст из этой ссылки. Я прошу прощения за это. Довольно простая проблема. –
hpricot больше не рекомендуется. Я бы предложил использовать Nokogiri, который является стандартом де-факто и короткой рукой hpricot поддержки. –