我在正則表達式如此糟糕,但我試圖讓some/path/image.jpg
出http://somepage.com/some/...etc
和嘗試此方法:如何在PHP中匹配URL中的域部分?
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
它不工作 - 只要我可以告訴它只是返回空白字符串。我該如何編寫這個正則表達式?
我在正則表達式如此糟糕,但我試圖讓some/path/image.jpg
出http://somepage.com/some/...etc
和嘗試此方法:如何在PHP中匹配URL中的域部分?
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
它不工作 - 只要我可以告訴它只是返回空白字符串。我該如何編寫這個正則表達式?
你應該使用parse_url
你可能想用這個,而不是正則表達式: http://cz2.php.net/manual/en/function.parse-url.php 這將分手的網址給你,所以你剛纔讀的結果數組的域名
使用正如其他人已經說過的那樣。
但回答你的問題,爲什麼你的正則表達式不工作,它將匹配整個的URL,因爲.*
匹配任何東西,事實上它是。它與整個網址相匹配,並用空字符串替換它,從而得到您的結果。儘量不要使用以下這隻會(任何東西到第一個「/」)匹配一個主機名:
function removeDomain($string) {
return preg_replace("@^https?://[^/]+/@", "", $string);
}
雖然SilentGhost是正確的,你的正則表達式失敗的原因是因爲*是貪婪的,並且會吃一切,只要之後有一個/
。
如果你把?
馬克你.*
後,將只匹配直到第/
function removeDomain($string) {
return preg_replace("/http:\/\/.*?\//", "", $string);
}
完美,謝謝 – 2009-10-10 22:04:35