2009-11-28 66 views
0

我一直在尋找一個正則表達式,只會吐出'stackoverflow'部分,並沒有www。或.com等所有我能找到的是檢查如果網址是有效的...我已經使用php的url過濾器來確定我現在正在尋找,以確定它是哪個網站。php - 正則表達式主機名提取

我從來沒有寫過一個表達式,所以我希望有人可以檢查它/推薦更好的解決方案。

preg_match('@^(?:http://)(?:www.)?([^.]+)@i', $url, $matches) 

編輯: 所有我處理的URL的是.COM是否有幫助

回答

2

單行不使用正則表達式!!!

$url = 'http://stackoverflow.com'; 
$d = array_shift(explode('.', str_replace('www.', '', parse_url($url, PHP_URL_HOST)))); 
echo $d; 
+0

哈哈...它只有一個班輪,因爲你把它全部放在一行:)無論它運作良好。迄今爲止最好的。 – Mark 2009-11-28 20:39:38

+1

這失敗了。使用這個字符串'www.myusualhost-test.co.in.php53-1.dfw1-2.websitetestlink.com',它給了我'myusualhost-test',而我只想'myusualhost-test.co.in.php53- 1.dfw1-2.websitetestlink'。 – Kumar 2012-06-11 08:56:08

0

如果你知道你遇到的事情是一個URL,並以.com一件簡單的事情域結束像

preg_match('#([^\.]*)\.com#', $url, $matches); 

應該做的伎倆。

雖然這會在像www.com.foo.com這樣的域上失敗,但可能已經足夠,具體取決於您的情況。

0
preg_match('#https?://(?:www.)?(.*?)\.com#i', $str, $match); 
5

您是否考慮過PHP的parse_url()函數?

+0

該功能真的很棒......除了它仍然讓我有時是'www'。有時候沒有'www'。所以我仍然必須preg_replace www。 – Mark 2009-11-28 20:35:14