我得到了这条路线:
get %r{/content.json/([\w]+)/([\w]+)/} do
...
end
并且匹配“/content.json/123/abc”。 但是我希望匹配任意数量的目录,比如“/content.json/123/456/abc/def”并将这样的参数传递给我:
{"splat":[],"captures":["123","456","abc","def"]}
如何编写正则表达式?
答案 0 :(得分:1)
执行此操作的一种可能方法是匹配单个组中的子目录,并将其拆分为路径本身:
get %r{/content.json/([\w\/]*)} do
dirs = params[:captures][0].split("/");
...
end
根据请求/content.json/123/456/abc/def
,dirs
将包含数组["123", "456", "abc", "def"]
。
答案 1 :(得分:0)
这是不可能的。单个正则表达式只能有固定数量的捕获(尽管其中一些可能最终捕获nil
)。如果你设置了深度限制,比如说4,那么,你可以这样做:
%r{/content.json(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?}