欲しいもの
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
でいくつかの関連する質問を見つけましたが、どれも私が探していたものではありませんでした。
助けてくれてありがとう!
これに正規表現を使用する必要はありません。 PHPには、これを行うための関数が組み込まれています。 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
はホストキーを返さないためです。
これは theraccoonbearの正規表現 に似ていますが、HTTPSドメインをサポートしています。
if (preg_match('/https?:\/\/([^\/]+)\//i', $target_string, $matches)) {
$domain = $matches[1];
}
http://
すべてにプレフィックスを付けます。
$tmp = explode("/", $url);
$domain = $tmp[2];
$tmp = parse_url($url);
$url = $tmp['Host']
preg_match('/(http(|s)):\/\/(.*?)\//si', 'http://www.example.com/page/?bla=123#!@#$%^&*()_+', $output);
// $output[0] ------------> https://www.example.com/
次の正規表現があなたの質問に答えるかもしれないと思います。
この図 それがどのように機能するか、またはむしろそれがなぜ機能するかを説明します:-)
$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 ;-)
これが私の迅速で汚い解決策です。
http://([^/]+).*
私はそれをテストしていませんが、http://
と最初のスラッシュの間の何かをつかむはずです。
if (preg_match('/http:\/\/([^\/]+)\//i', $target_string, $matches)) {
$domain = $matches[1];
}