2014-04-17 61 views
-1

我一直在試圖弄清楚這一點,並且我已經搜索過但我被卡住了。ruby​​正則表達式用於刪除url前綴並結束

可以說我有串www.google.com或http://google.com或只是google.com

,我想提取字符串谷歌出這些參數。

我能想到的解決方案是首先刪除第一個參數(www。),然後刪除字符串(.com)的第二部分,但我知道有一個類似的更有效的方法。

任何幫助將不勝感激!

+2

您將很難使用單個(或多個)正則表達式。網址並不那麼簡單,除了域名之外,還可以有國家代碼和多個主機名稱(例如,http://www.open.gov.uk)。請參閱http://www.ietf.org/rfc/rfc1738.txt和http://tools.ietf.org/html/rfc3986以瞭解您所面臨的問題。 –

回答

3

首先,從一個專門用於處理URL的工具開始。紅寶石包括URI,也有Addressable::URI

使用這些你可以剝離下來一個URI到其定義的組件:

require 'uri' 

uri = URI.parse('http://www.ruby-doc.org/stdlib-2.1.1/libdoc/uri/rdoc/URI.html') 
uri.host # => "www.ruby-doc.org" 

如果字符串不以方案開始,你可以添加一個。 (方案很重要。)

url = 'foo.bar.com/some/path' 
URI.parse('http://' + url).host 
# => "foo.bar.com" 

從這一點開始,您將很難確定什麼是真正的主機,而不是域。域可以是任何東西(非常多),主機可以是域名。可能你可以得到一個域名列表,但請記住名單不斷變化。

ICANN有一個TLD列表,IANA也有。那些只是頂級域名,而不是坐在他們之下的主機。但是,使用這些列表,您可以從主機中刪除頂級域名,至少離您想要的位置更近一點。

+0

我認爲你是對的,這是做這件事的唯一可靠的方式,我意識到我在一個正則表達式中的嘗試是如何被刪除的答案。 –

+0

你是對的,有一個簡單的正則表達式無法正確匹配的多個案例。這是有道理的,我會跟進和閱讀更多關於這個計劃。謝謝一堆! – jimmycouch