正则表达式匹配路由参数

时间:2017-04-08 09:33:24

标签: php regex url-routing

我总是在使用正则表达式时遇到困难。当路由设置参数时,我正在尝试制作匹配路由的正则表达式:

例如:

  • /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与该路由正则表达式匹配。

我目前拥有的是:

My regex

在这个例子中,我尝试为路由制作一个正则表达式:/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,那么请告诉我。

1 个答案:

答案 0 :(得分:1)

希望这会帮助你

正则表达式:^(?:\/post\b)(?:\/[\w]+){2}$

Regex demo