示例:
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...
}
但是没有工作,有人可以帮助我吗?
答案 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)
。