Lua url 模式匹配

Lua url pattern matching

我有以下 URI:

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

我想要分别匹配上述 URI 的 3 个独立模式。我正在使用 string.match 函数进行模式匹配。

有人可以帮我解决 Lua 模式吗?

谢谢

您可以使用

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

online Lua demo

最后一个图案详情

  • ^ - 字符串开头
  • /v1/resource1/ - 文字字符串
  • [^/]* - /
  • 以外的 0 个或更多字符
  • / - 一个 / 字符
  • [^/]* - /
  • 以外的 0 个或更多字符
  • $ - 字符串结尾。

但我认为,拥有一个适用于所有具有相同结构的字符串的通用模式会更好。所以你应该避免在模式中使用文字字符串(除了,你正在寻找的正是这个)。

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