动态url路径的Lua模式匹配
我需要更改和存储传入请求的动态url路径,并将其存储在后端 下面是示例url动态url路径的Lua模式匹配,lua,pattern-matching,lua-patterns,Lua,Pattern Matching,Lua Patterns,我需要更改和存储传入请求的动态url路径,并将其存储在后端 下面是示例url GET /v1/merchants 用我的Lua代码我把它改成 GET_/v1/merchants 一切都很好,正是我所需要的。但当我尝试在url中使用动态路径时,问题就出现了 例如:GET/v1/content/merchants/{string} url可以是GET/v1/content/merchants/foo或GET/v1/content/merchants/bar 我想在后端存储上述格式,如GET/v
GET /v1/merchants
用我的Lua代码我把它改成
GET_/v1/merchants
一切都很好,正是我所需要的。但当我尝试在url中使用动态路径时,问题就出现了
例如:GET/v1/content/merchants/{string}
url可以是GET/v1/content/merchants/foo
或GET/v1/content/merchants/bar
我想在后端存储上述格式,如GET/v1/content/merchants/string
,因为我无法在后端GET/v1/content/merchants/foo
或GET/v1/content/merchants/bar>中存储每个传入请求
下面是代码
local function get_method(request)
local method, path, query_fragment = request:match("^(.+) ([^%?]+)(%??.*) .+$")
if method and path then
return method .. "_" .. path
else
return nil
end
end
local function extract_usage(request)
local usage_t = {}
local ts_method = get_method(request)
if ts_method then
usage_t[ts_method] = set_or_inc(usage_t, ts_method, 1)
return build_querystring(usage_t)
else
return nil
end
end
我建议使用
local function get_method_updated(request)
local method, path, query_fragment = request:match("^(.+) ([^%?]+)(%??.*) .+$")
if method and path then
if path:match('^/[^/]+/[^/]+/[%w_]+') ~= nil then
return method .. " " .. path
else
return method .. "_" .. path
end
else
return nil
end
end
print(get_method_updated("GET /v1/merchants something"))
print(get_method_updated("GET /v1/content/merchants/foo or"))
print(get_method_updated("GET /v1/content/merchants/bar some"))
看
输出:
GET_/v1/merchants
GET /v1/content/merchants/foo
GET /v1/content/merchants/bar
更新的get\u方法将确保您不会获取带下划线的请求部分作为返回值。我建议使用
local function get_method_updated(request)
local method, path, query_fragment = request:match("^(.+) ([^%?]+)(%??.*) .+$")
if method and path then
if path:match('^/[^/]+/[^/]+/[%w_]+') ~= nil then
return method .. " " .. path
else
return method .. "_" .. path
end
else
return nil
end
end
print(get_method_updated("GET /v1/merchants something"))
print(get_method_updated("GET /v1/content/merchants/foo or"))
print(get_method_updated("GET /v1/content/merchants/bar some"))
看
输出:
GET_/v1/merchants
GET /v1/content/merchants/foo
GET /v1/content/merchants/bar
更新的get\u方法将确保您不会获取带下划线的请求部分作为返回值。什么是{id}
?除了字符串末尾的/
以外的任何字符或仅数字?{id}是数据类型=字符串。它可以是/v1/content/merchants/foo或/v1/content/merchants/bar。我理解你的困惑,我将编辑这篇文章。我仍然不明白问题出在哪里GET/v1/merchants
与^(+.+)([^%?]+)(??.*)。+$
模式不匹配。请发布可复制的代码和预期输出。请检查。如果我没弄错的话,get\u method\u updated
将确保您不会获取带下划线的请求部分作为返回值。什么是{id}
?除了字符串末尾的/
以外的任何字符或仅数字?{id}是数据类型=字符串。它可以是/v1/content/merchants/foo或/v1/content/merchants/bar。我理解你的困惑,我将编辑这篇文章。我仍然不明白问题出在哪里GET/v1/merchants
与^(+.+)([^%?]+)(??.*)。+$
模式不匹配。请发布可复制的代码和预期输出。请检查。如果我没弄错的话,get\u method\u updated
将确保您不会获取带下划线的请求部分作为返回值。