Próbowałem już tak, jednak nie potrafię wyciągnąć poprawnie całego rozszerzenia gdy występuje co.uk
Przykład dla domeny z samym .uk:
Kod
<?php
function parseUrl($url) {
$r = "^(?:(?<start>\w+)://)?";
$r .= "(?<host>(?:(?P<subdomena>[\w\.]+)\.)?" . "(?<domena>\w+)\.(?<extension>(co\.)?uk))";
$r .= "(?::(?<port>\d+))?";
$r .= "(?<path>[\w/]*/(?<file>\w+(?:\.\w+)?)?)?";
$r .= "(?:\?(?<arg>[\w=&]+))?";
$r .= "(?:#(?<anchor>\w+))?";
$r = "!$r!"; // Delimiters
preg_match ( $r, $url, $out );
return $out;
}
echo "<pre>";
print_r ( parseUrl ( 'https://www.test.domeny.uk' ) );
echo "</pre>";
?>
można sprawdzić tutaj:
http://sandbox.onlinephpfunctions.com/code...6b541a55b2a07ad - działa ok
ale.. przy co.uk już się sypie:
http://sandbox.onlinephpfunctions.com/code...01082c63696331eMożna jakoś ustawic, by wybierał dłuższego stringa jeśli taki istnieje?