0

我在正则表达式方面很糟糕,但我试图some/path/image.jpg摆脱http://somepage.com/some/...etc并尝试这种方法:

function removeDomain($string) {

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

}

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

4

4 回答 4

5

你应该使用parse_url

于 2009-10-10T22:00:53.963 回答
2

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

于 2009-10-10T22:02:24.030 回答
1

parse_url就像其他人已经说过的那样使用。

但是要回答您关于为什么您的正则表达式不起作用的问题,它将匹配整个URL,因为.*匹配任何内容,而且确实如此。它匹配整个URL,并将其替换为空字符串,因此您的结果。请尝试以下仅匹配主机名(直到第一个'/'):

function removeDomain($string) {
    return preg_replace("@^https?://[^/]+/@", "", $string);
}
于 2009-10-10T22:06:49.060 回答
1

虽然 SilentGhost 是正确的,但您的正则表达式失败的原因是因为 .* 是贪婪的,并且会吃掉所有东西,只要有一个/之后。

如果你?在你的后面加上一个标记.*,它只会匹配到第一个/

function removeDomain($string) {

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

}
于 2009-10-10T22:07:02.163 回答