1

私はこのルートを得ました:

get %r{/content.json/([\w]+)/([\w]+)/} do
  ...
end

「/content.json/123/abc」に一致します。しかし、「/content.json/123/456/abc/def」のような任意の数のディレクトリに一致させ、次のようなパラメーターを渡したいと思います。

{"splat":[],"captures":["123","456","abc","def"]}

正規表現はどのように記述する必要がありますか?

4

2 に答える 2

1

これを行う可能な方法は、サブディレクトリを 1 つのグループに一致させ、それらをルート自体で分割することです。

get %r{/content.json/([\w\/]*)} do
  dirs = params[:captures][0].split("/");
  ...
end

リクエスト/content.json/123/456/abc/defdirsは、配列が含まれます["123", "456", "abc", "def"]

于 2013-04-08T19:13:15.350 に答える
0

それは不可能です。1 つの正規表現は固定数のキャプチャしか持つことができません (ただし、一部はキャプチャされる場合がありますnil)。深さに制限を設定した場合、たとえば 4 の場合、次のようにすることができます。

%r{/content.json(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?}
于 2013-04-08T16:14:32.613 に答える