Так что вы начинаете не с URL.
Самое простое решение - сделать его похожим на URL:
function get_host_from_bad_url($url)
{
if (!$candidate_host=parse_url($url, PHP_URL_HOST)) { // deliberate assignment
$candidate_host=parse_url('http://' . $url, PHP_URL_HOST);
}
return $condidate_host;
}
Существует множество других вещей, которые могут содержать имя хоста, но без большого количества информации сложно предложить, как их проанализировать.
Однако альтернативный подход состоит в том, чтобы попытаться извлечь что-либо, похожее на имя хоста (а затем, возможно, выполнить проверку DNS):
function strip_hosts_from_string($inp)
{
$inp=strtolower($inp);
$matches=preg_match_all('/([a-z0-9\-]+\.){2,}([a-z]{2,6})/',$inp);
$hostnames=$matches[0];
foreach ($hostnames as $x=>$host) {
if (gethostbyname($host)==$host) {
unset($hostnames[$x]);
}
}
return $hostnames;
}
С