可选动作路线预匹配 PHP

Optional action route preg match PHP

示例:

http://mysite.domain/user1 //profile user 1
http://mysite.domain/user1/photos //photos user 1
http://mysite.domain/user1/friends //friends user 1

操作用户仅照片或friends.This是我的代码:

if (preg_match('/^\/([\w\-]+)(\/[photos|friends]+)$/i', $url, $m)) {
       //code...
}

但是不工作,有人可以帮助我吗?

一个错误是 [photos|friends]+。这将匹配太广泛,即提到的字符的任意组合,包括 |;不是您放置顺序中的整个字符串('photos''profile')。

我想你想要的表达式是 '/^\/([\w\-]+)\/(photos|friends)$/i' — 假设 $url'/user1/photos''/user1/friends'.

我建议在匹配 URL 时使用 / 以外的正则表达式定界符,因为必须转义所有斜线会使表达式难以理解。就个人而言,我喜欢使用逗号(因为它在 URL 中很少见):',^/([\w\-]+)/(photos|friends)$,i'.

更新

要使最后一部分(/photos/friends)可选,请使用 ',^/([\w\-]+)(/(photos|friends))?$,i'。如果你想允许 /user1/ (带尾部斜杠),你可以让它更简单 ',^/([\w\-]+)/(photos|friends)?$,i'.

? 将使前面的标记可选(在第一种情况下,这是 (/(photos|friends)),在第二种情况下,它只是 (photos|friends).