可选动作路线预匹配 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)
.
示例:
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)
.