PHP正則表達式匹配URL中的域名


     在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM