2011-08-09 34 views
1

当我试图从一个字符串中爆炸URL时,它没有返回实际的URL。请找我用正则表达式来炸开URL

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 

的DEF当我这样做self.getUrlsFromString(" check this site...http://lnkd.in/HjUVii")它返回

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

而不是

http://lnkd.in/HjUVii

回答

1

这是因为在grep的Array类返回元素===图案中的每个元素的数组,因此

str.split.grep(/http/ix) 

将返回[ “网站... HTTP://lnkd.in/HjUVii”]太。

你可以尝试,而不是

str.split.grep(url_regexp) 

是这样的:

url_regexp.match(str).to_s 
0

你不应该使用的东西像正则简单得多:

/((http|https):[^\s]+)/ 
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/"]