检查网址是否与模板

时间:2017-05-12 23:02:35

标签: regex string pattern-matching

我正在为PHP的路由系统工作(语言对这个问题不以为然)。

我有一个这样的路由数组:(在实际程序中,每个路由都有一个回调,如果它匹配就会运行)

[
    '/',
    '/posts/{id}',
    '/posts/{year}/{month}',
   '/about'
]

我可以使用URL的最佳方式是什么,比如/posts/2b45v21并从阵列中获取最接近的匹配路由?

根据输入/posts/2b45v21,它应与/posts/{id}匹配,但不能与//posts/{year}/{month}匹配。

我尝试了几种使用正则表达式的方法,比如将{...}转换为.*?然后转义所有反斜杠,但我不能匹配{{1} }}

我认为最好的方法是遍历所有路由并找到匹配最接近的路由,但问题是如果没有匹配则它可以默认为/(例如输入{ {1}}真的不应该返回任何匹配,但最接近的是' /')

1 个答案:

答案 0 :(得分:0)

我决定看看ExpressJS如何处理路由匹配,并发现他们使用的库有一个PHP端口。 https://github.com/gpolguere/path-to-regexp-php

现在我已经实现了一切按预期工作:)