Parsing 解析eLUA中的URL参数

Parsing 解析eLUA中的URL参数,parsing,url,lua,gsub,Parsing,Url,Lua,Gsub,假设我有一个URL,如: 如何将R、G和B的值转换成单独的变量?我已经研究过g.sub,但我仍然一点也不明白,解释只是代码,没有进一步说明任何东西是如何工作的 使用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) 下面是一个更通用的解决方案,它将字段

假设我有一个URL,如:


如何将R、G和B的值转换成单独的变量?我已经研究过g.sub,但我仍然一点也不明白,解释只是代码,没有进一步说明任何东西是如何工作的

使用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)

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

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.R
t.G
t.B
t.B

这是最简单的方法。但是%d+做什么呢?lua如何知道哪个值进入哪个变量?%d+-表示一个或多个数字,变量按顺序从()到r、g、b得到符号。