我正在为PHP的路由系统工作(语言对这个问题不以为然)。
我有一个这样的路由数组:(在实际程序中,每个路由都有一个回调,如果它匹配就会运行)
[
'/',
'/posts/{id}',
'/posts/{year}/{month}',
'/about'
]
我可以使用URL的最佳方式是什么,比如/posts/2b45v21
并从阵列中获取最接近的匹配路由?
根据输入/posts/2b45v21
,它应与/posts/{id}
匹配,但不能与/
或/posts/{year}/{month}
匹配。
我尝试了几种使用正则表达式的方法,比如将{...}
转换为.*?
然后转义所有反斜杠,但我不能匹配{{1} }}
我认为最好的方法是遍历所有路由并找到匹配最接近的路由,但问题是如果没有匹配则它可以默认为/
(例如输入{ {1}}真的不应该返回任何匹配,但最接近的是' /')
答案 0 :(得分:0)
我决定看看ExpressJS如何处理路由匹配,并发现他们使用的库有一个PHP端口。 https://github.com/gpolguere/path-to-regexp-php
现在我已经实现了一切按预期工作:)