从字符串 (Ruby) 中提取 URL(正则表达式和 link 缩短)
Extract URLs from String (Ruby) (Regex and link shortened)
我听说 URI::extract()
只有 returns link 带有 :
,但是因为我正在抓取一条推文,它不包含 [=13] =],我相信我必须使用正则表达式。我需要检查 "swoo.sh/whatever" link,并将其存储到一个变量中。但是,关于我必须维护 /
之后的所有内容,我怎么能找到第一个(它显然 returns 自动),"swoo.sh/whatever" link。例如,如果推文说
Lorem ipsum lorem ipsum swoo.sh/12xfsW lorem ipsum
我如何获取 swoo.sh link 以及 /
之后的所有不同内容?
这是一种使用 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 的能力,那么我的答案就必须更新。这只会回答您的直接问题。
我们可以利用 URI 不能包含 space 和 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" 看起来像一个缩短的 link,但在上下文中它可能是 "my neighbor threw a baseball through my window so i yanked the hubcabs off his car.net gain!!!",显然它只是一个缺失的 space.
我听说 URI::extract()
只有 returns link 带有 :
,但是因为我正在抓取一条推文,它不包含 [=13] =],我相信我必须使用正则表达式。我需要检查 "swoo.sh/whatever" link,并将其存储到一个变量中。但是,关于我必须维护 /
之后的所有内容,我怎么能找到第一个(它显然 returns 自动),"swoo.sh/whatever" link。例如,如果推文说
Lorem ipsum lorem ipsum swoo.sh/12xfsW lorem ipsum
我如何获取 swoo.sh link 以及 /
之后的所有不同内容?
这是一种使用 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 的能力,那么我的答案就必须更新。这只会回答您的直接问题。
我们可以利用 URI 不能包含 space 和 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" 看起来像一个缩短的 link,但在上下文中它可能是 "my neighbor threw a baseball through my window so i yanked the hubcabs off his car.net gain!!!",显然它只是一个缺失的 space.