it-swarm.com.ru

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

Что я хочу


Я хочу получить от 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, но ни один из них не был именно тем, что я искал. 

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

20
Adam

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

$domain = parse_url($url, PHP_URL_Host);
72
cletus

Я использую:

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

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

2
Marcin Żurek

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

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

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

$tmp = explode("/", $url);
$domain = $tmp[2];
1
Josh K
$tmp = parse_url($url);
$url = $tmp['Host']
1
turbod

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

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

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

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

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

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