在PHP的官網上看到的parse_url()函數的替代。結果和parse_url()函數差不多,是使用正則實現的,看到好就轉過來。
原文:http://www.php.net/parse_url#104958
我就不翻譯了,它可以解析URI
URI 是 Web上可用的每種資源 - HTML文檔、映像、視頻片段、程式等 - 由一個通用資源標誌符(Uniform Resource Identifier, 簡稱"URI")進行定位。
對就分組:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
PHP 測試:
<?php$search = '~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~i';$url = 'http://www.php.net/pub/ietf/uri/#Related';$url = trim($url);preg_match_all($search, $url ,$rr);printf("<p>輸出URL資料為:</p><pre>%s</pre>\n",var_export( $rr ,TRUE));/*各分組如下 $1 = http: $2 = http $3 = //www.php.net $4 = www.php.net $5 = /pub/ietf/uri/ $6 = <undefined> $7 = <undefined> $8 = #Related $9 = Related*/?>
百度上看到另外一塊簡潔的代碼:
<?php // 從 URL 中取得主機名稱 preg_match("/^(http:\/\/)?([^\/]+)/i", "http://www.php.net/index.html", $matches); $host = $matches[2]; // 從主機名稱中取得後面兩段 preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); echo "domain name is: {$matches[0]}\n"; ?>
執行後輸出:domain name is: php.net