可选操作路由preg匹配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

仅限用户的照片或好友的操作。这是我的代码:

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

但不工作,有人能帮我吗?

一个错误是[photos|friends]+。这将过于宽泛地匹配,即所提到的字符的任何组合,包括|;而不是按您放置的顺序排列的整个字符串('photos''profile')。

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

我建议在匹配URL时使用除/之外的regex分隔符,因为必须转义所有斜杠会使表达式难以理解。就我个人而言,我喜欢使用逗号(因为它在URL中相当罕见):',^/(['w'-]+)/(photos|friends)$,i'

更新

要使最后一部分(/photos/friends)可选,请使用',^/(['w'-]+)(/(photos|friends))?$,i'。如果您想允许使用/user1/(带有尾部斜线),您可以将其保持为更简单的',^/(['w'-]+)/(photos|friends)?$,i'

?将使前一个令牌可选(在第一种情况下,这是(/(photos|friends)),在第二种情况下它只是(photos|friends)