2013-01-06 103 views
2

可能重複:
Linkify Regex Function PHP Daring Fireball MethodURL檢測字符串

我想從一個字符串的URL和我在這裏有這個

$link_count = count(explode('http',$post)); 
if($link_count > 0){ 
    preg_match_all("#https?://[^.\s]+\.[^\s]+#ix", $note, $matches); 
    foreach(){} etc.. 
} 

問題我也希望能夠檢測到這樣的網址; http://www.link.com或www.link.com或link.com PS:我已經搜查了在這裏類似的問題,但我還沒有看到一個都不會忽略這些類型的URL。

謝謝。

+0

檢測link.com將是相當困難的(你可能會得到這樣的「someword.It」的結果,另外兩個是很容易 – Oussama

+0

如果他們沒有一個協議前綴,那麼在技術上他們沒有聯繫,但主機名。你需要決定的約束,作爲匹配任何'\ w + \。\ S +'會導致誤報。 – mario

回答

1

試試這個正則表達式:

#(https?://)?([a-z0-9-]+\.)+[a-z0-9]+/?#i 
+0

你並不真正需要的'(WWW \)?',因爲它會用'([一個覆蓋-z0-9 - ] + \)+'權也沒有設置在TLD長度的限制,因爲它們是不斷變化的,並把4的限制將阻止。旅行.museum和IANA具有使計劃?公司購買自己的TLD所以也可能會被。谷歌,例如在未來。檢查的字邊界的第一次出現應該是不錯。 –

+0

是的,你說得對WWW,但對TLD的事情,我不知道他們打算做你說的話, 謝謝。 – Oussama

+0

https://en.wikipedia.org/wiki/Generic_top-level_domain#June_20.2C_2011_vote_on_expansion_of_gTLDs看起來像許多將在今年去住。下面是關於已申請https://www.pcworld.com/article/257430/the_top_10_proposed_new_top_level_domains_so_far.html我肯定會改變你的正則表達式,因爲它會在許多領域一次,今年是在失敗的人更多的信息。 –

2

嘗試

"/\b((http(s)?:\/\/)?(www\.[a-zA-Z0-9\/\\\:\?\%\.\&\;=#\-\_\!\+\~\,]*))/is 

正如馬里奧說,沒有協議前綴的鏈接在技術上不是鏈接。

+0

你不需要逃避所有這些字符我把清除它適合你的自由,看看這裏:。http://regex101.com/r/yL5hA6 –