2009-10-10 43 views
0

我在正則表達式如此糟糕,但我試圖讓some/path/image.jpghttp://somepage.com/some/...etc和嘗試此方法:如何在PHP中匹配URL中的域部分?

function removeDomain($string) { 

    return preg_replace("/http:\/\/.*\//", "", $string); 

} 

它不工作 - 只要我可以告訴它只是返回空白字符串。我該如何編寫這個正則表達式?

回答

1

使用正如其他人已經說過的那樣。

但回答你的問題,爲什麼你的正則表達式不工作,它將匹配整個的URL,因爲.*匹配任何東西,事實上它是。它與整個網址相匹配,並用空字符串替換它,從而得到您的結果。儘量不要使用以下這隻會(任何東西到第一個「/」)匹配一個主機名:

function removeDomain($string) { 
    return preg_replace("@^https?://[^/]+/@", "", $string); 
} 
1

雖然SilentGhost是正確的,你的正則表達式失敗的原因是因爲*是貪婪的,並且會吃一切,只要之後有一個/

如果你把?馬克你.*後,將只匹配直到第/

function removeDomain($string) { 

    return preg_replace("/http:\/\/.*?\//", "", $string); 

}