2013-05-10 123 views
6

我需要幫助創建一個匹配所有網址的正則表達式,例如,請不要將問題作爲重複關閉,因爲我一直在尋找我需要很長時間的東西,而沒有答案看到已經給出瞭解決我的問題的答案。PHP的正則表達式匹配所有網址

website.com

www.website.com

http://www.website.com

http://website.com

https://www.website.com

https://website.com

什麼也尾隨

www.website.com/path-to-something

我編碼的東西,縮短任何URL,但要做到這一點,首先我需要配合他們。

感謝

+2

到目前爲止你的努力是什麼? – Rikesh 2013-05-10 11:53:13

+0

我已經嘗試過不同的表達式,Regex並不完全是我的特長...(http:// [^] +),這是我現在所擁有的,但它只匹配一種。 – 2013-05-10 11:53:57

+1

@Spudley:不要這麼想,因爲'website.com'不是一個有效的URL,而且用例不同。 OP想要搜索匹配的基本URL。 – Aquillo 2013-05-10 12:06:20

回答

14

這一場比賽都正確,你貼:

preg_match_all('#[[email protected]:%_\+.~\#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~\#?&//=]*)?#si', $targetString, $result); 
+0

請精心策劃...? – Aquillo 2013-05-10 11:55:50

+0

我得到一個錯誤:警告:preg_match():未知的修飾符'{'我需要將它包裹在某些東西? – 2013-05-10 11:56:28

+0

這在JS中有效,我會嘗試將其轉換。 – 2013-05-10 11:58:45

1

您可以使用下面的技巧:

$url = "your URL" 
$validation = "/^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*(?:\.[A-Z0-9][A-Z0-9_-]*)+):?(\d+)?\/?/i"; 
if((bool)preg_match($validation, $url) === false) 
echo 'Not a valid URL'; 

我認爲它可能對你的作品。

4

你想用這樣的:

$string = 'www.blah.com'; 

$temp_string = (!preg_match('#^(ht|f)tps?://#', $string)) // check if protocol not present 
    ? 'http://' . $string // temporarily add one 
    : $string; // use current 

if (filter_var($temp_string, FILTER_VALIDATE_URL)) 
{ 
    echo 'is valid'; 
} else { 
    echo 'not valid'; 
} 

此使用PHP的構建URL驗證。它將首先檢查協議是否存在,如果不存在,它會臨時將一個字符串添加到要檢查的字符串中,然後通過驗證來運行它。這與目前接受的答案不同。

+0

這是否與gooogle.com和www.google.com匹配? – 2013-05-12 10:59:11

+0

是http://viper-7.com/Jz7nR1和是http://viper-7.com/Iv9SiS – 2013-05-12 11:03:03

+0

上面的代碼所做的是,如果它發現一個無效的URL,它並不以http:// https:// ftp://或ftps://它會暫時添加http://,使其成爲一個完整的URL,然後可以安全地將其傳遞到內置URL驗證功能的PHP中。否則,如果它已經包含它,它將直接傳遞給驗證函數。 – 2013-05-12 11:04:26

1

請勿使用正則表達式。有一個PHP功能可以做你想做的事。

http://php.net/manual/en/function.parse-url.php

+0

問題是要求如何分解URL這樣的東西,以便可以檢查等價鏈接是否轉到等同的地方,而不是它是否有效或不。他想檢查主機是否相同,路徑是否相同等。 – Danack 2013-05-11 00:51:51

+0

實際上,我們會縮短無效的網址,如果有人使用google.com,我們會匹配可能成爲網址的內容。從技術上講,這將是無效的,但我們只是尋找解決它,然後縮短它....解析網址是不是我們需要的,我們已經有一個使用正則表達式工作完全按照我們想要的解決方案,感謝您張貼您的答案無論如何。 – 2013-05-12 10:57:12

+0

@Danack parse_url():_這個函數並不是要驗證給定的URL,它只是把它分解成上面列出的部分._ – Fredmat 2015-05-21 17:07:39