我有以下URI:
/v1/resource1
/v1/resource1/{uuid}
/v1/resource1/{uuid}/resource2
我尝试将/v1/resource1
和/v1/resource/+
用作两个模式,但是第二个模式同时匹配第二个和第三个URI
我想拥有3个单独的模式,分别与上述URI匹配。我正在使用string.match函数进行模式匹配。
有人可以用Lua模式帮助我吗?
谢谢
答案 0 :(得分:1)
您可以使用
string.match("/v1/resource1", "^/v1/resource%d*$")
string.match("/v1/resource1/{uuid}", "^/v1/resource1/[^/]*$")
string.match("/v1/resource1/{uuid}/resource2", "^/v1/resource1/[^/]*/[^/]*$")
最后的模式详细信息
^
-字符串的开头/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