我在正则表达式方面很糟糕,但我试图some/path/image.jpg
摆脱http://somepage.com/some/...etc
并尝试这种方法:
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
它不起作用——据我所知,它只是返回一个空白字符串。我该如何写这个正则表达式?
我在正则表达式方面很糟糕,但我试图some/path/image.jpg
摆脱http://somepage.com/some/...etc
并尝试这种方法:
function removeDomain($string) {
return preg_replace("/http:\/\/.*\//", "", $string);
}
它不起作用——据我所知,它只是返回一个空白字符串。我该如何写这个正则表达式?
你应该使用parse_url
您可能想使用它而不是正则表达式: http ://cz2.php.net/manual/en/function.parse-url.php 这将为您分解 URL,因此您只需读取域的结果数组姓名
parse_url
就像其他人已经说过的那样使用。
但是要回答您关于为什么您的正则表达式不起作用的问题,它将匹配整个URL,因为.*
匹配任何内容,而且确实如此。它匹配整个URL,并将其替换为空字符串,因此您的结果。请尝试以下仅匹配主机名(直到第一个'/'):
function removeDomain($string) {
return preg_replace("@^https?://[^/]+/@", "", $string);
}
虽然 SilentGhost 是正确的,但您的正则表达式失败的原因是因为 .* 是贪婪的,并且会吃掉所有东西,只要有一个/
之后。
如果你?
在你的后面加上一个标记.*
,它只会匹配到第一个/
function removeDomain($string) {
return preg_replace("/http:\/\/.*?\//", "", $string);
}