Извлечение URL из строки (Ruby) (регулярное выражение и ссылка сокращены) - PullRequest
0 голосов
/ 09 мая 2018

Я слышал, что URI::extract() возвращает ссылки только с :, однако, поскольку я перехватываю твит, а он не содержит :, я считаю, что мне придется использовать регулярное выражение. Мне нужно проверить ссылку «swoo.sh/whwhat» и сохранить ее в переменной. Тем не менее, как я могу найти первую (которая, по-видимому, она автоматически возвращает) ссылку «swoo.sh/whwhat», в связи с этим я должен поддерживать все после /. Например, если в твите написано

Lorem ipsum lorem ipsum swoo.sh/12xfsW Lorem ipsum

Как мне получить ссылку на swoo.sh и все другие вещи, которые идут сразу после /?

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Мы можем использовать тот факт, что URI не могут содержать пробелы, а Ruby имеет URI :: Generic , который будет анализировать почти все, что выглядит как URI. Тогда нам просто нужно отфильтровать не-веб-URI, что я делаю, предполагая, что каждый веб-URI должен начинаться с чего-то вроде foo.bar

require 'uri'
require 'pathname'

tweet.
  split.
  map { |s| URI.parse(s) rescue nil }.
  select { |u| u && (u.hostname || Pathname(u.path).each_filename.first =~ /\w\.\w/) }

Пример вывода

tweet = 'foo . < google.com bar swoosh.sh/blah?q=bar http://google.com/bar'
# the above returns
# [#<URI::Generic google.com>, #<URI::Generic swoosh.sh/blah?q=bar>, #<URI::HTTP http://google.com/bar>]

Это не может работать вообще из-за двусмысленности. «car.net» выглядит как укороченная ссылка, но в контексте это может быть «мой сосед бросил бейсбольный мяч через мое окно, поэтому я выдернул колпаки из его выигрыша car.net !!!», где это явно просто пропущенное место.

0 голосов
/ 09 мая 2018

Вот один подход с использованием match:

match = /(\w+\.\w+\/\w+)/.match("Lorem ipsum lorem ipsum swoo.sh/12xfsW lorem ipsum")
if match
    puts match[1]
else
    puts "no match"
end

Демо

Если вам также требуется одновременная возможность захвата полных URL-адресов, мой ответ должен быть обновлен. Это только ответит на ваш ближайший вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...