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

如何在PHP中匹配URL的域部分?,php,regex,url-rewriting,preg-replace,Php,Regex,Url Rewriting,Preg Replace,我对regexp很在行,但我正试图从中获得一些/path/image.jpghttp://somepage.com/some/...etc 尝试这种方法: function removeDomain($string) { return preg_replace("/http:\/\/.*\//", "", $string); } 它不工作-据我所知,它只是返回一个空白字符串。如何编写这个regexp?您应该使用它,而不是regex: 这将为您拆分URL,因此您只需读取域名的结果数组

我对regexp很在行,但我正试图从中获得一些/path/image.jpghttp://somepage.com/some/...etc 尝试这种方法:

function removeDomain($string) {

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

}

它不工作-据我所知,它只是返回一个空白字符串。如何编写这个regexp?

您应该使用它,而不是regex: 这将为您拆分URL,因此您只需读取域名的结果数组

使用parse\u URL,其他人已经说过了

但是要回答您关于为什么您的正则表达式不工作的问题,它将匹配整个URL,因为。*匹配任何东西,事实上它是。它匹配整个URL,并将其替换为空字符串,从而得到结果。请尝试以下仅与主机名匹配到第一个“/”的选项:

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

虽然SilentGhost是对的,但您的正则表达式失败的原因是。*很贪婪,只要有一个/after,它就会吃掉所有东西

如果你放一个?在您的*之后标记,它将只匹配到第一个/

function removeDomain($string) {

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

}