Используйте parse_url
, как уже говорили другие люди.
Но чтобы ответить на ваш вопрос о том, почему ваше регулярное выражение не работает, оно будет соответствовать всему URL, потому что .*
соответствует чему угодно, и это действительно так. Он соответствует URL-адресу whole и заменяет его пустой строкой, отсюда и ваши результаты. Вместо этого попробуйте следующее, которое будет соответствовать только имени хоста (что угодно, вплоть до первого '/'):
function removeDomain($string) {
return preg_replace("@^https?://[^/]+/@", "", $string);
}