0

是否有预先构建的方法可以在 in 的字符串中查找类似 url 的字符串ruby?我听说过URI::Extract但玩弄它,它似乎只找到前缀为 urlhttp://

我需要能够在字符串中找到任何类似 url 的字符串,例如:

http://test.com
http://www.test.com
www.test.com
test.com

应该全部找到并归还给我。

我知道我可以在正则表达式中解决这个问题,但我更愿意使用任何预先构建的东西(如果存在的话)。特别是它应该找到.net,.org.edu

4

4 回答 4

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"]
于 2013-08-23T04:50:08.817 回答
1

您可以使用 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.

于 2013-08-23T08:59:30.440 回答
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”子域的情况下不会检测到任何域)。

于 2016-05-11T23:31:56.523 回答
-2

您可以使用正则表达式来提取 URL。这是一个很好的正则表达式:

(?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

于 2013-08-23T05:21:04.633 回答