我在regexp上非常糟糕,但我试图从some/path/image.jpg
中获取http://somepage.com/some/...etc
并尝试使用此方法:
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
它不起作用 - 据我所知,它只是返回一个空白字符串。我该如何写这个正则表达式?
答案 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);
}