РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ PHP: Получить домен по 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
, но ни один из них не был именно тем, что я искал.
Спасибо за любую помощь!
19
8 answers
Для этого нет необходимости использовать регулярное выражение. PHP имеет встроенную функцию для этого. Использовать parse_url()
:
$domain = parse_url($url, PHP_URL_HOST);
69
Author: cletus, 2010-08-09 17:04:13
Я использую:
$domain = parse_url('http://' . str_replace(array('https://', 'http://'), '', $url), PHP_URL_HOST);
Потому что parse_url
не возвращает ключ хоста, когда схема отсутствует в $url
.
2
Author: Marcin Żurek, 2016-05-17 14:52:36
Предполагает, что http://
добавляет префиксы ко всему.
$tmp = explode("/", $url);
$domain = $tmp[2];
1
Author: Josh K, 2010-08-09 17:04:06
$tmp = parse_url($url);
$url = $tmp['host']
1
Author: turbod, 2010-08-09 17:07:04
Это похоже на регулярное выражение из theraccoonbear, но с поддержкой доменов HTTPS.
if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) {
$domain = $matches[1];
}
1
Author: fnkr, 2017-05-23 12:02:17
Вот мое быстрое и грязное решение.
http://([^/]+).*
Я не тестировал его, но он должен захватывать что-либо между http://
и первой косой чертой.
0
Author: haydenmuhl, 2010-08-09 17:03:14
if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) {
$domain = $matches[1];
}
0
Author: theraccoonbear, 2010-08-09 17:05:13
Лучший способ, я думаю:
preg_match('/(http(|s)):\/\/(.*?)\//si', 'http://www.example.com/page/?bla=123#!@#$%^&*()_+', $output);
// $output[0] ------------> https://www.example.com/
0
Author: T.Todua, 2015-04-24 19:27:13