Lua url模式匹配

我有以下URI:

  • /v1/resource1
  • /v1/resource1/{uuid}
  • /v1/resource1/{uuid}/resource2

我尝试使用/v1/resource1/v1/resource/+作为几个模式,但第二个模式匹配第二个和第三个URI

我希望有3个单独的模式分别匹配上述URI。我使用string.match函数进行模式匹配

有人能帮我解决Lua模式吗?

谢谢

点赞
用户3832970
用户3832970

你可以使用

string.match("/v1/resource1", "^/v1/resource%d*$")
string.match("/v1/resource1/{uuid}", "^/v1/resource1/[^/]*$")
string.match("/v1/resource1/{uuid}/resource2", "^/v1/resource1/[^/]*/[^/]*$")

查看 在线 Lua 演示

最后一个模式的详情

  • ^ - 字符串开始
  • /v1/resource1/ - 字面字符串
  • [^/]* - 0 或多个非 / 字符
  • / - / 字符
  • [^/]* - 0 或多个非 / 字符
  • $ - 字符串结束。
2018-10-24 19:10:59
用户88888888
用户88888888

我想,最好拥有一种适用于所有具有相同结构的字符串的通用模式。因此,除非您确实要查找它们,否则应避免使用字面字符串在模式内。

list_url = {'/v1/resource1','/v1/resource1/{uuid}','/v1/resource1/{uuid}/resource2'}

patt1 = '^/[^/]+/[^/]+'
patt2 = patt1..'/%{[^}]+}'
patt3 = patt2..'/[^/]+'

for _, url in pairs(list_url) do
    print(url)
    print('\t', url:match(patt1..'$'))
    print('\t', url:match(patt2..'$'))
    print('\t', url:match(patt3..'$'))
end

输出:

/v1/resource1
    /v1/resource1
    nil
    nil
/v1/resource1/{uuid}
    nil
    /v1/resource1/{uuid}
    nil
/v1/resource1/{uuid}/resource2
    nil
    nil
    /v1/resource1/{uuid}/resource2
2018-10-25 07:44:32