2011-08-09 45 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/"]