|
发表于 2012-8-1 22:18:46
|
显示全部楼层
本帖最后由 viqecel 于 2012-8-1 22:19 编辑
竖线其实是pattern的分界符,在php中有/(斜线),|(竖线),#(#号)3种,也就是下面3个是等价的。
<?php
$t='/page/2';
preg_match("|/*(.+?)/*$|",$t,$b);
print_r ($b);
$t='/page/2';
preg_match("/\/*(.+?)\/*$/",$t,$b);
print_r ($b);
$t='/page/2';
preg_match("#/*(.+?)/*$#",$t,$b);
print_r ($b);
//End_php
上面返回结果为
返回 Array ( [0] => /page/2 [1] => page/2 )
这里使用竖线是为了/不用转义,看第二个需要\/来转义pattern中的斜线了。
*是表示0个或多个的意思,表示此处可能没有斜线,也有可能有多个斜线,即:
$t='page/2'; 或 $t='////page/2';也是能匹配的。?表示0个或1个,表示第二个斜线之前可能没有,也可能有数据,因此,/*为0,(.+?)为0,/*为0,的情况下,即$t='2';也都可以被匹配。
如果这样理解,应该得到是 用 home 替换掉 /home/ 吧 ,这样结果就应该是 homeindex 但是结果是 home/index 显然我的理解有错误,自己想了半天 还是不解 求指点,还有就是这两种写法 为什么都不起作用呢??
你上面的理解不全面吧.人家前面不是有后面这句了嘛,explode("/", preg_replace("|/*(.+?)/*$|", "\\1", $this->uri_string))
explode这个函数目的就是把得到的字符串以/分割到数组中.怎么可 能得到homeindex
|
|