2017-03-23 37 views
0

所以即時通訊正在工作的正則表達式,這將用於論壇,也有bbcode的支持。這個正則表達式假設捕獲所有以https,http和www開頭的鏈接,並將它們鏈接到鏈接。PHP的正則表達式來查找鏈接

目前它捕獲所有的https和http,但不是www的。而我不知道如何獲取以www開頭的那些。

還要記住,如果鏈接已經在一個bbcode中,它不應該在這個正則表達式中捕獲。

return preg_replace('/(?<!src=[\"\'])(http(s)?:\/\/(www\.)?[\/a-zA-Z0-9%\?\.\-]*)(?=$|<|\s)/','<a href="$1">$1</a>', $text); 
+0

鏈接總是有一個協議的主導方案。你試圖解釋一些可能被解釋爲引用的字符串,這是一件有風險的事情。也只有很少的主機名稱的網絡服務器仍然帶有傳統的www.this在1980年使用的前綴... – arkascha

+0

www的支持是因爲當前版本的網站用戶不復制和粘貼從網站的網址。相反,他們知道地址並添加www。而不是URL中的http://。 – Fyllekanin

回答

2

我可以建議嘗試:

(?<!src=[\"\'])((http(s)?:\/\/(www\.)?|(www\.))[\/a-zA-Z0-9%\?\.\-]*)(?=$|<|\s) 

我相信這應該抓住的HTTP(S)和www。