Что я хочу
Я хочу получить от URL части domain, а от http://example.com/ -> example.com
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, но ни один из них не был именно тем, что я искал.
stackoverflow
Спасибо за любую помощь!
Нет необходимости использовать регулярное выражение для этого. PHP имеет встроенную функцию, чтобы сделать это. Используйте parse_url():
parse_url()
$domain = parse_url($url, PHP_URL_HOST);
Я использую:
$domain = parse_url('http://' . str_replace(array('https://', 'http://'), '', $url), PHP_URL_HOST);
Поскольку parse_url не возвращает ключ хоста, когда схема отсутствует в $url.
parse_url
$url
Это похоже на регулярное выражение от theraccoonbear , но с поддержкой доменов HTTPS.
if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) { $domain = $matches[1]; }
$tmp = parse_url($url); $url = $tmp['host']
Предполагается, что http:// префикс всех.
http://
$tmp = explode("/", $url); $domain = $tmp[2];
preg_match('/(http(|s)):\/\/(.*?)\//si', 'http://www.example.com/page/?bla=123#!@#$%^&*()_+', $output); // $output[0] ------------> https://www.example.com/
if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) { $domain = $matches[1]; }
Вот мое быстрое и грязное решение.
http://([^/]+).*
Я не проверял его, но он должен перехватить что-нибудь между http:// и первым слешем.