Подтвердить что ты не робот

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

Что я хочу


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

<сильные > Примеры:


+----------------------------------------------+-----------------------+
| input                                        | output                |
+----------------------------------------------+-----------------------+
| http://www.stackoverflow.com/info/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, но ни один из них не был именно тем, что я искал.

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

4b9b3361

Ответ 1

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

$domain = parse_url($url, PHP_URL_HOST);

Ответ 2

Я использую:

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

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

Ответ 3

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

$tmp = explode("/", $url);
$domain = $tmp[2];

Ответ 4

$tmp = parse_url($url);
$url = $tmp['host']

Ответ 5

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

if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) {
  $domain = $matches[1];
}

Ответ 6

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

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

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

Ответ 7

if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) {
  $domain = $matches[1];
}

Ответ 8

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

preg_match('/(http(|s)):\/\/(.*?)\//si',  'http://www.example.com/page/?bla=123#[email protected]#$%^&*()_+', $output);
// $output[0] ------------>  https://www.example.com/

Ответ 9

Я думаю, что следующее регулярное выражение может ответить на ваш вопрос.

Эта диаграмма объясняет, как это работает, или, скорее, почему это работает :-)

$regexp = '/.*\/\/([^\/:]+).*/';

// www.stackoverflow.com
echo preg_replace($regexp, '$1', 'http://www.stackoverflow.com/info/ask');

// google.de
echo preg_replace($regexp, '$1', 'http://google.de/?q=hello');

// it works for the other input tests too ;-)