在 eLUA 中解析 URL 参数

假设我有一个这样的 URL:http://ip/rgb/color?R=200&G=100&B=300

我该如何将 R、G 和 B 的值分别存入变量中?我已经研究了 g.sub,但我仍然完全不理解,解释只是一些没有进一步说明任何工作原理的代码。

点赞
用户7504558
用户7504558

使用 string.match 和模式:

local url = "http://ip/rgb/color?R=200&G=100&B=300"
local r,g,b= url:match("R=(%d+)&G=(%d+)&B=(%d+)")
print (r,g,b)
2017-04-19 08:32:56
用户107090
用户107090

下面是一个更通用的解决方案,可以将字段和值存储在表格中,而无需知道字段的名称或顺序:

S=[[
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjGpbabuLDTAhUD5iYKHe2LAzcQFgglMAA&url=http%3A%2F%2Fwww.eluaproject.net%2F&usg=AFQjCNHWegTT2pHkN8L75iW2UZBA5_pOMQ&sig2=VxlaLWBWD81Hp8KF8ijw1Q
]]

t = {}
S = S:match(".-?(.*)$") .. "&"
for k,v in S:gmatch("(.-)=(.-)&") do
    t[k]=v
    print(k,v)
end

它首先获取参数列表(即第一个 ? 后面的所有内容),在末尾添加&以确保一致性。然后,所有的键值对都处于 key = value & 的形式。

将此代码应用于您的URL,您将获得 t.Rt.Gt.B

2017-04-19 11:46:19