【发布时间】:2014-01-12 09:15:18
【问题描述】:
我正在尝试构建自己的 URL 路由匹配引擎,尝试使用正则表达式匹配路由。
例如,让我们考虑这样一种场景:服务器应用程序允许设置自定义参数化路由,然后在路由被 HTTP 请求调用时执行一个函数。开发者可以创建以下路由:
/users/:id/doSomething/hello/world/:format/convert
它们中的每一个都将与不同的请求处理程序/函数相关联。
现在,对于传入的请求,服务器应该能够将请求的路径匹配到正确的处理程序。因此,例如,如果客户端应用程序请求 http://myservice.com/users/john/doSomething,服务器应该能够判断请求的 URL 属于 /users/{id}/doSomething 路由定义,然后执行关联的处理程序。
我个人构建路由匹配器的方式是获取请求的 URL,遍历路由定义,如果定义与请求的 URL 匹配,则执行处理程序。棘手的部分是动态参数匹配。
您将如何构建与 URL 段匹配的正则表达式?
编辑:
我目前正在使用以下正则表达式来匹配段:([^/\?])+。
例如,要检查请求路径是否属于我将匹配的第一个路由:
/users/([^/])+/doSomething
这是一个非常宽松的正则表达式。
【问题讨论】:
-
我很惊讶我不得不问你你尝试了什么。
-
已更新为当前实现。
-
@Mark 在您的编程语言中没有解析 url 的好函数吗?但是您可以使用
\/([^\/\?]+)作为您的正则表达式!