background image

使用正则表达式匹配

URL 的简单方法,提供测试代码

PHP 的官网上看到的

parse_url

()函数的替代方案。结果和

parse_url

()函数差不多,是使用

正则实现的。

URI 是 Web 上可用的每种资源 - HTML 文档、图像、视频片段、程序等 - 由一个

通用资源标志符(

Uniform Resource Identifier, 简称"URI")进行定位。 对象分组:

 
 
复制代码

 代码如下:

^(([^:/?#]+):)?(

//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

12            3  4        
 
测试代码如下:
复制代码

 代码如下:

<?php

$search

 = '~^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?~i';

$url

 = 'http://

 

 

www.yl1001.com

 

 

/

  

§

#Gonn';

$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.nowamagic.net

      

$4 = www.nowamagic.net

      

$5 = /pub/ietf/uri/

      

$6 = <undefined>

      

$7 = <undefined>

      

$8 = #Gonn

      

$9 = Gonn

*/

?>
 
 
上面的正则表达式可以获取

URL 中的任何一部分,下面的代码则简单一些:

复制代码

 代码如下:

<?php 

// 从 URL 中取得主机名 

preg_match("/^(http:\/\/)?([^\/]+)/i", "http://

www.yl1001.com

$matches

); 

$host

 = 

$matches

[2]; 

// 从主机名中取得后面两段 

preg_match("/[^\.\/]+\.[^\.\/]+$/", 

$host

$matches

); 

echo

 "domain name is: {$matches[0]}\n";