【发布时间】:2017-04-08 09:33:24
【问题描述】:
我总是在使用正则表达式时遇到一些困难。当路由设置了参数时,我正在尝试制作与路由匹配的正则表达式:
例如:
-
/post/1匹配/post/{id} -
/post/5/不匹配/post/{id} -
/post/6/comments/4匹配/post/{id}/comments/{comment} -
/post/a-random-slug匹配/post/{id}或/post/{slug}(无论你想给参数命名) -
/user匹配/user,但不匹配/user/
我目前所做的是为每个路由创建一个正则表达式,然后将当前 URI 与该路由正则表达式进行匹配。
我目前拥有的是:
在这个例子中,我尝试为路由创建一个正则表达式:/post/{param1}/{param2}。这意味着它应该匹配/post/,然后是一个参数和另一个参数,但没有在那个参数之后。
如您所见:^(\/post\b)(\/.{1,}\/)(.{1,}\b)$ 匹配 /post/what-is-your-name/5,当我添加另一个 / 时,它不再匹配。但是,如果您再次在该正则表达式之后添加字符 ,它将再次开始匹配。
意思是:
-
/post/what-is-your-name/5/不匹配 -
/post/what-is-your-name/5/more确实匹配
有人知道如何完成第一个示例吗?
到目前为止,我是一个非常了解正则表达式的人,如果有人看到更好的方法来匹配 URI 和路由,请告诉我。
【问题讨论】:
标签: php regex url-routing