Php 正则表达式匹配路由参数

Php 正则表达式匹配路由参数,php,regex,url-routing,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/ 我目前所做的是为每个路由创建一个正则表达式

我总是在和正则表达式打交道时有点吃力。当路由设置了参数时,我试图创建一个与路由匹配的正则表达式:

例如:

  • /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/您的名字是什么/5
,当我添加另一个
/
时,它不再匹配。但是,如果在该正则表达式之后再次添加字符,它将再次开始匹配

意思是:

  • /post/您的姓名/5/
    不匹配
  • /post/你叫什么名字/5/更多
    是否匹配
有人知道我如何完成第一个例子吗


到目前为止,我是一个非常了解正则表达式的人,如果有人发现更好的方法来匹配URI和路由,那么请告诉我。

希望这能帮助您

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


这是我目前拥有的,请注意,此路由应该匹配
/post/{param}/{param}
,仅此而已。如果你在这之后添加了它,它在我和你的示例@MelvinKoopmans中仍然匹配,你能做一件事吗?用更多你想要匹配的示例更新你的帖子,或者not@MelvinKoopmans在这篇文章中,你能提到你不想匹配哪一个吗?我正在尝试匹配
/post/{param}/{param}
。现在,您的一个my regex也匹配它后面的所有内容,这意味着/post/{param}/{param}/{param}/{param}/{param}也匹配它matches@MelvinKoopmans请检查这一点,希望它将工作良好,如果它不工作,只是在链接中提到哪一个你不想得到匹配