Я никогда раньше не использовал регулярное выражение, и мне было интересно, как писать регулярное выражение на PHP, которое получает домен URL. Например: http://www.hegnar.no/bors/article488276.ece -> hegnar.no
Просто используйте parse_url()
если вы имеете дело с URL-адресами.
Например:
$url = "http://www.hegnar.no/bors/article488276.ece"; $url_u_want = parse_url($url, PHP_URL_HOST);
Документы
EDIT: вынуть www. infront, используйте:
$url_u_want = preg_replace("/^www\./", "", $url_u_want);
Вам не нужно использовать regexp для этой задачи.
Проверьте встроенную функцию PHP, parse_url http://php.net/manual/en/function.parse-url.php
$page = "http://google.no/page/page_1.html"; preg_match_all("/((?:[az][az\\.\\d\\-]+)\\.(?:[az][az\\-]+))(?![\\w\\.])/", $page, $result, PREG_PATTERN_ORDER); print_r($result);
$host = parse_url($url, PHP_URL_HOST); $host = array_reverse(explode('.', $host)); $host = $host[1].'.'.$host[0];
Видеть
PHP Regex для извлечения поддоменов произвольных доменов
а также
Javascript / Regex для поиска только корневого имени домена без поддоменов
Это проблема, когда вы используете parse_url, $ url без .com или .net или т. Д., Тогда возвращаемый результат является bannedadsense , это означает возвращение true, факт bannedadsense не является доменом.
$url = 'http://bannedadsense/isbanned'; // this url will return false in preg_match //$url = 'http://bannedadsense.com/isbanned'; // this url will return domain in preg_match $domain = parse_url($url, PHP_URL_HOST)); // return "bannedadsense", meaning this is right domain.
Так что нам нужно продолжать проверять больше случаев без расширения точек (.com, .net, .org и т. Д.),
if(preg_match("/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i",$domain)) { echo $domain; }else{ echo "<br>"; echo "false"; }