【问题标题】:Sinatra: Match arbitrary number of directory occurrencesSinatra:匹配任意数量的目录出现
【发布时间】:2013-04-09 03:13:15
【问题描述】:

我得到了这条路线:

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

它匹配“/content.json/123/abc”。 但我想匹配任意数量的目录,比如“/content.json/123/456/abc/def”,然后把参数交给我:

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

正则表达式需要怎么写?

【问题讨论】:

    标签: ruby regex sinatra


    【解决方案1】:

    一种可能的方法是匹配单个组中的子目录,并将它们拆分到路由本身中:

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

    对于请求/content.json/123/456/abc/defdirs 将包含数组["123", "456", "abc", "def"]

    【讨论】:

      【解决方案2】:

      那是不可能的。单个正则表达式只能有固定数量的捕获(尽管其中一些最终可能会捕获nil)。如果你对深度设置了一个限制,比如四个,那么你可以这样做:

      %r{/content.json(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?(?:/([\w]+))?}
      

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 2023-02-21
        • 1970-01-01
        • 2020-09-08
        • 2023-03-24
        • 1970-01-01
        • 2020-12-01
        • 2011-06-03
        • 1970-01-01
        相关资源
        最近更新 更多