Lua URL模式匹配

时间:2018-10-24 18:12:15

标签: lua lua-patterns

我有以下URI:

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

我尝试将/v1/resource1/v1/resource/+用作两个模式,但是第二个模式同时匹配第二个和第三个URI

我想拥有3个单独的模式,分别与上述URI匹配。我正在使用string.match函数进行模式匹配。

有人可以用Lua模式帮助我吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用

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个或更多字符
  • $-字符串的结尾。

答案 1 :(得分: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