Lua url 模式匹配
Lua url pattern matching
我有以下 URI:
/v1/resource1
/v1/resource1/{uuid}
/v1/resource1/{uuid}/resource2
我尝试使用 /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/[^/]*/[^/]*$")
最后一个图案详情
^
- 字符串开头
/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
我有以下 URI:
/v1/resource1
/v1/resource1/{uuid}
/v1/resource1/{uuid}/resource2
我尝试使用 /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/[^/]*/[^/]*$")
最后一个图案详情
^
- 字符串开头/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