用于分解URL的正则表达式

时间:2011-08-09 11:36:06

标签: ruby-on-rails ruby regex ruby-on-rails-3

当我试图从一个字符串中分解url时,它没有返回实际的URL。请找到我使用的def

def self.getUrlsFromString(str="")
    url_regexp = /(?:http|https):\/\/[a-z0-9]+(?:[\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(?:(?::[0-9]{1,5})?\/[^\s]*)?/ix
    url        = str.split.grep(url_regexp)
    return url
rescue Exception =>  e
    DooDooLogger.log(e.message,e)
    return ""
end

当我执行self.getUrlsFromString(" check this site...http:// lnkd.in/HjUVii")时,它正在返回

  

网站... HTTP://lnkd.in/HjUVii

而不是

  

http://lnkd.in/HjUVii

3 个答案:

答案 0 :(得分:1)

这是因为Array类中的grep返回元素=== pattern的每个元素的数组,所以

str.split.grep(/http/ix)

也将返回[“site ... http://lnkd.in/HjUVii”]。

您可以尝试代替

str.split.grep(url_regexp)

类似的东西:

url_regexp.match(str).to_s

答案 1 :(得分:0)

你不应该像正则表达式那样使用更简单的东西:

/((http|https):[^\s]+)/

答案 2 :(得分:0)

如果要查找字符串中的所有匹配项,可以使用String#scan

str = "check these...http://lnkd.in/HjUVii http://www.google.com/"

str.scan(url_regexp)
=> ["http://lnkd.in/HjUVii", "http://www.google.com/"]