我得到了这条路线:
get %r{/content.json/([\w]+)/([\w]+)/} do
...
end
它匹配“/content.json/123/abc”。但我想匹配任意数量的目录,比如“/content.json/123/456/abc/def”,然后给我这样的参数:
{"splat":[],"captures":["123","456","abc","def"]}
正则表达式需要如何编写?
一种可能的方法是匹配单个组中的子目录,并将它们拆分到路由本身中:
get %r{/content.json/([\w\/]*)} do
dirs = params[:captures][0].split("/");
...
end
有了请求/content.json/123/456/abc/def
,dirs
就会包含数组["123", "456", "abc", "def"]
。
那是不可能的。单个正则表达式只能有固定数量的捕获(尽管其中一些最终可能会捕获nil
)。如果你对深度设置了一个限制,比如四个,那么你可以这样做:
%r{/content.json(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?}