可选的动作路径preg匹配PHP

时间:2015-02-25 14:58:30

标签: php router

示例:

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

仅限用户照片或朋友的行动。这是我的代码:

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

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

1 个答案:

答案 0 :(得分:0)

一个错误是[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)

相关问题