是否有预先构建的方法在ruby
中的字符串中查找类似URL的字符串?我听说URI::Extract
但是玩弄它,似乎只能找到以http://
为前缀的网址
我需要能够在字符串中找到任何类似url的字符串,例如:
http://test.com
http://www.test.com
www.test.com
test.com
应该找到并归还给我。
我知道我可以在正则表达式中解决这个问题,但如果它存在,我宁愿使用预先构建的任何东西。特别应该找到.net
,.org
,.edu
等
答案 0 :(得分:2)
我认为没有任何预先构建的内容可以找到“带有点的字符串”。这是正则表达式的开始:
str =<<END_OF_STRING
http://test.com
hello.
hello http://www.test.com world
.world
hi www.test.com world
test.com
END_OF_STRING
results = str.scan(/
\S+
[.]
\S+
/xms)
--output:--
["http://test.com", "http://www.test.com", "www.test.com", "test.com"]
答案 1 :(得分:0)
您可以使用Ruby的内置URI正则表达式,但test.com
不能成为有效的URI,因此无法返回。
require 'uri'
string =<<END
http://test.com
http://www.test.com
www.test.com
test.com
END
string.scan(URI.regexp) do |*matches|
p $&
end
如果需要,可以添加另一个表达式,以仅匹配test.com
等主机名。
答案 2 :(得分:0)
这对我来说似乎很重要:
\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|\w+\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))\b/ig
它 然后还会选择实际上不是有效URL的内容,例如abc.88。
它源自Daring Fireball正则表达式(至少在复制和粘贴时不起作用,并且在没有协议或明确的'www'子域的情况下不检测任何域)。
答案 3 :(得分:-2)
您可以使用正则表达式来提取网址。这是一个很好的正则表达式:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
来源:http://daringfireball.net/2010/07/improved_regex_for_matching_urls