PHP正则表达式路由功能匹配URLS

时间:2011-04-21 02:09:34

标签: php regex url routing router

我想编写一个解析URL的路由器,例如我给它规则,然后我希望有一个基于名称的数组。

==

编辑:

所以我确实重写了一点代码 新代码可以在这里找到: http://pastebin.com/Ver601FF

结果可以在这里看到: http://img824.imageshack.us/i/phpprob.png/

我现在没有得到的是我可以根据具有索引作为第二个路径参数的数组中的正则表达式匹配url值的方式。

========================编辑停止================== 最后我想有一个数组:

$request['controller']
$request['action']

作为基本的$ request params,因为我一直需要它们 - 所以这必须是我的标准/默认路线。

所以,让我们说$ pattern [2]正在发生,当我完成这个可怕的正则表达式时,我想有这个:

$request['controller']
$request['action'] = show
$request['id']
$request['name']

显然,根据要求的网址,所有内容都必须相应填写......

它不知道是不是因为它已经迟到了,但是我无法弄明白,我必须如何匹配这些东西。

我是否需要拆分网址并在检查其是否与路线匹配后?然后使用它们彼此相关的值。

我不知道解决方案的另一个问题是,事实是,像

这样的网址

“/信息/显示/一些/其他/东西”

必须给我一些像

这样的东西
$request['controller']  = information
$request['action'] = show
$request['params'] = array(some, other, stuff)

我感谢任何帮助,并希望有人可以帮助我解决这个问题:(

非常感谢你。

2 个答案:

答案 0 :(得分:1)

$regex  .= "[a-zA-Z]\/";

应该是

$regex  .= "[a-zA-Z]+\/";

第一个匹配一个字母。第二个匹配一个或多个。

此外,你的斜杠位于错误的位置([]/[]/ vs /[]/[])并且你的匹配没有固定。

...
$regex .= "\/[a-zA-Z]+";
...
$regex .= "\/" . $route;
...
print_r(preg_grep("/^" . $patt . "\z/i", $url));
...

答案 1 :(得分:0)

我自己找到了问题的答案 - 我希望它可以帮助那些人。但是我可能会在一点点新鲜之后将它发布到某个地方。

查看解决方案: http://pastebin.com/FAbhneMZ

我现在要重写它并从中产生一个合适的类,如果有人认为这个小路由器中的逻辑可以改进,请告诉我!

所有最优秀的人。

EDIT 改变了链接,因为该版本仍然是错误的并且不好,这是我正在使用的最终解决方案,经过2天的测试后,我认为它只是按照我需要的方式工作。希望它可以帮助别人!