2010-12-07 2 views
1

Я никогда раньше не использовал регулярное выражение, и мне было интересно, как написать регулярное выражение в PHP, которое получает домен URL. Например: http://www.hegnar.no/bors/article488276.ece -> hegnar.noРегулярное выражение для получения основного домена URL-адреса

+0

похож на это: [Http: // StackOverflow .com/a/9891706/480021] (http://stackoverflow.com/a/9891706/480021) – zyanlu 2012-03-27 14:40:49

ответ

2

Просто используйте parse_url(), если вы имеете дело с URL-адресами.

Например:

$url = "http://www.hegnar.no/bors/article488276.ece"; 
$url_u_want = parse_url($url, PHP_URL_HOST); 

Docs

EDIT: Чтобы вынуть WWW. Infront, использование:

$url_u_want = preg_replace("/^www\./", "", $url_u_want); 
7

Вам не нужно использовать regexp для выполнения этой задачи.

Check PHP встроенный в функции, parse_url http://php.net/manual/en/function.parse-url.php

+0

Он возвращает null, когда URL-адрес не имеет www. или http – 2010-12-07 16:03:46

+0

Что возвращает false? Ссылка на руководство по php? – 2010-12-07 16:06:00

+0

Функция. Возвращает null, если URL-адрес не имеет www. – 2010-12-07 16:08:11

1
$host = parse_url($url, PHP_URL_HOST); 
$host = array_reverse(explode('.', $host)); 
$host = $host[1].'.'.$host[0]; 
2
$page = "http://google.no/page/page_1.html"; 
preg_match_all("/((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])/", $page, $result, PREG_PATTERN_ORDER); 

print_r($result); 
0

Это проблема при использовании parse_url, в $ URL без каких-либо .com или .net или и т.д., то результат Возвращается bannedadsense, это означает возвращение истинного, тот факт 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"; 
} 
Смежные вопросы