我听说URI::extract()
只返回带有:
的链接,但是因为我抓了一条推文,而且它不包含:
,我相信我必须使用正则表达式。我需要检查一下" swoo.sh/whatever"链接,并将其存储到变量。但是,我怎么能找到第一个(它显然会自动返回)," swoo.sh/whatever"链接,关于我必须在/
之后维护所有内容。例如,如果推文说
Lorem ipsum lorem ipsum swoo.sh/12xfsW lorem ipsum
我如何抓住swoo.sh链接以及/
之后直接出现的所有不同内容?
答案 0 :(得分:1)
以下是使用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
如果您还需要同时捕获完整网址的能力,那么我的答案必须更新。这只会回答您当前的问题。
答案 1 :(得分:1)
我们可以使用URI不能包含空格的事实,而Ruby有this document这几乎可以解析任何看起来像URI的东西。然后我们只需要过滤掉非web-URI,我假设每个Web 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>]
由于含糊不清,这一般无法正常工作。 &#34; car.net&#34;看起来像是一个缩短的链接,但在上下文中它可能是&#34;我的邻居在我的窗户上扔了一个棒球,所以我把他们的车载的轮毂罩从他的车网上拿走!!!&#34;,它显然在那里只是一个缺失的空间。