如何在PHP中匹配URL的域部分?

时间:2009-10-10 21:58:55

标签: php regex url-rewriting preg-replace

我在regexp上非常糟糕,但我试图从some/path/image.jpg中获取http://somepage.com/some/...etc并尝试使用此方法:

function removeDomain($string) {

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

}

它不起作用 - 据我所知,它只是返回一个空白字符串。我该如何写这个正则表达式?

4 个答案:

答案 0 :(得分:5)

你应该使用parse_url

答案 1 :(得分:2)

你可能想要使用它而不是正则表达式: http://cz2.php.net/manual/en/function.parse-url.php 这将为您分解URL,因此您只需读取域名的结果数组

答案 2 :(得分:1)

正如其他人已经说过的那样使用parse_url

但要回答关于为什么你的正则表达式不起作用的问题,它会匹配整个网址,因为.*匹配任何内容,实际上它是匹配的。它匹配整个 URL,并将其替换为空字符串,从而得到结果。请尝试以下操作,而只匹配主机名(第一个'/'之前的任何内容):

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

答案 3 :(得分:1)

虽然SilentGhost是正确的,但你的正则表达式失败的原因是因为。*是贪婪的,只要之后有/就会吃掉所有内容。

如果您在?之后添加.*标记,则只会在第一个/

之前匹配
function removeDomain($string) {

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

}