Hello!
2015-07-06 14:48 GMT+08:00 pengzhixi68:
> str =
> "platform=2&app_version=3.4.3.1.3&app_id=1835&device_code=%5Bw%5D7c%3A1d%3Ad9%3A45%3A7b%3Acc-%5Bi%5D866229025503721-%5Bs%5D89860080191455330351&market_id=tool_baidu&_key=%200xcf7b5296%20NORMAL%206%5BCLZ&22222"
> 想把这样的一个字符串的key-value解析出来,用了for i,v in string.gmatch(str,"(%w_)=(^&)*")
> print(i,v) end 解析不出来,想请教大家给点指导
>
你这个 Lua 正则写的问题很大,建议首先学习一下 Lua 正则的语法:
http://www.lua.org/manual/5.1/manual.html#5.4.1
一个正确的版本是:
for k, v in string.gmatch(str, "([%w_]*)=([^&]*)") do
print(k, "=", v)
end
作用于你给出的字符串得到的输出为:
platform = 2
app_version = 3.4.3.1.3
app_id = 1835
device_code =
%5Bw%5D7c%3A1d%3Ad9%3A45%3A7b%3Acc-%5Bi%5D866229025503721-%5Bs%5D89860080191455330351
market_id = tool_baidu
_key = %200xcf7b5296%20NORMAL%206%5BCLZ
貌似正是期望的。
不过,正如 YuanSheng Wang 所指出的,使用 ngx.decode_args() 是更健壮的做法。
Regards,
-agentzh