PHP REGEX: получить домен по URL - PullRequest
       9

PHP REGEX: получить домен по URL

20 голосов
/ 09 августа 2010

Что я хочу


Я хочу получить от URL части domain, а от http://example.com/ -> example.com

Примеры:


+----------------------------------------------+-----------------------+
| input                                        | output                |
+----------------------------------------------+-----------------------+
| http://www.stackoverflow.com/questions/ask   | www.stackoverflow.com |
| http://validator.w3.org/check                | validator.w3.org      |
| http://www.google.com/?q=hello               | www.google.com        |
| http://google.de/?q=hello                    | google.de             |
+----------------------------------------------+-----------------------+

Я нашел несколько связанных вопросов в stackoverflow, но ни один из них не был именно тем, что я искал.

Спасибо за любую помощь!

Ответы [ 8 ]

74 голосов
/ 09 августа 2010

Нет необходимости использовать регулярное выражение для этого. PHP имеет встроенную функцию, чтобы сделать это. Используйте parse_url():

$domain = parse_url($url, PHP_URL_HOST);
2 голосов
/ 17 мая 2016

Я использую:

$domain = parse_url('http://' . str_replace(array('https://', 'http://'), '', $url), PHP_URL_HOST);

Поскольку parse_url не возвращает ключ хоста, когда схема отсутствует в $url.

1 голос
/ 06 декабря 2013

Это похоже на регулярное выражение от theraccoonbear , но с поддержкой доменов HTTPS.

if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) {
  $domain = $matches[1];
}
1 голос
/ 09 августа 2010
$tmp = parse_url($url);
$url = $tmp['host']
1 голос
/ 09 августа 2010

Предполагается, что http:// префикс всех.

$tmp = explode("/", $url);
$domain = $tmp[2];
0 голосов
/ 24 апреля 2015

Лучший способ, которым я думаю:

preg_match('/(http(|s)):\/\/(.*?)\//si',  'http://www.example.com/page/?bla=123#!@#$%^&*()_+', $output);
// $output[0] ------------>  https://www.example.com/
0 голосов
/ 09 августа 2010
if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) {
  $domain = $matches[1];
}
0 голосов
/ 09 августа 2010

Вот мое быстрое и грязное решение.

http://([^/]+).*

Я не проверял его, но он должен перехватить что-нибудь между http:// и первым слешем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...