web-dev-qa-db-ja.com

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でいくつかの関連する質問を見つけましたが、どれも私が探していたものではありませんでした。

助けてくれてありがとう!

20
Adam

これに正規表現を使用する必要はありません。 PHPには、これを行うための関数が組み込まれています。 parse_url() を使用してください。

$domain = parse_url($url, PHP_URL_Host);
74
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#!@#$%^&*()_+', $output);
// $output[0] ------------>  https://www.example.com/
0
T.Todua

次の正規表現があなたの質問に答えるかもしれないと思います。

この図 それがどのように機能するか、またはむしろそれがなぜ機能するかを説明します:-)

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

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

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

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

これが私の迅速で汚い解決策です。

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

私はそれをテストしていませんが、http://と最初のスラッシュの間の何かをつかむはずです。

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