2013-10-28 30 views
0

我有這個正常工作的正則表達式,但是當我使用包含@的url時,它在@之後沒有任何顯示。我怎麼可以編輯正則表達式來展現完整的URL獲取完整的網址正則表達式

<?php 

$regex = "/(https?\:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(\/+[a-z0-9_.\:\;-]*)*(\?[\&\%\|\+a-z0-9_=,\.\:\;-]*)?([\&\%\|\+&a-z0-9_=,\:\;\.-]*)([\!\#\/\&\%\|\+a-z0-9_=,\:\;\.-]*)}*/i"; 


$url = "http://www.flickr.com/photos/[email protected]/8376411748/in/photostream/"; 

preg_match_all($regex, $url, $matches); 

echo'<pre>'; 
print_r($matches); 
echo '<pre>'; 

?> 

DEMO http://codepad.viper-7.com/oVHcdN

+2

那麼,如果你寫它,那麼你應該知道你必須在某處添加一些'@'...爲了簡單起見,我可以使用'〜https?:// \ S +〜i' – HamZa

+0

@HamZa從某處複製它。我有一個非常小的正則表達式知識。你可以給我看看正則表達式加入@&'〜https?; // \ S +〜i' – Ace

+0

試試這個$ regex =「/(https?\:\/\/| \ s)[a-z0-9- ] +(\ [A-Z0-9 - ] +。)*(\ [AZ] {2,4}。)(\/+ [A-Z0-9 _ \:\; - ] *)*(\ ?[\&\%\ | \ + A-Z0-9 _ =,\ \:\; - 。] *)([\&\%\ | \ + A-Z0-9 _ =,\?:\; \ .- @] *)([\ \#\/\&\%\ | \ + A-Z0-9 _ =,\:\; \ .-] *)} */I「; –

回答

3

如果你想訪問一個網址的幾個部分我們強烈鼓勵使用功能parse_url(),而不是一個自定義的正則表達式解決方案:

$url = "http://www.flickr.com/photos/[email protected]/8376411748/in/photostream/"; 
var_dump(parse_url($url)); 

輸出:

array(3) { 
    ["scheme"]=> 
    string(4) "http" 
    ["host"]=> 
    string(14) "www.flickr.com" 
    ["path"]=> 
    string(47) "/photos/[email protected]/8376411748/in/photostream/" 
} 
+0

我可以用它來代替正則表達式嗎? – Ace

+0

是的,它意味着您的正則表達式解決方案的替代品。 – hek2mgl