我有一段lua代码(在Corona中执行):
local loginstr = "emailAddress={email} password={password}"
print(loginstr:gsub( "{email}", "tester@test.com" ))
此代码生成错误:
无效的捕获索引
虽然我现在知道这是因为在gsub模式中未正确指定花括号,但我不知道如何修复它。
我应该如何形成gsub模式,以便我可以用电子邮件地址值替换占位符字符串?
我查看了所有可以找到的面向浏览器的网站,但大多数文档似乎都围绕着无关联的情况。
答案 0 :(得分:5)
正如我在上面的评论中所建议的,当电子邮件被编码为URL参数时,用于编码'@'字符的%40将被用作捕获索引。由于搜索模式没有任何捕获(更不用说其中的40个),这将导致问题。
有两种可能的解决方案:您可以解码编码的字符串,也可以编码替换字符串以转义其中的'%'字符。根据您对最终结果的处理方式,您可能需要同时执行这两项操作。
以下例程(我从here获取 - 未经测试)可以解码编码的字符串:
function url_decode(str)
str = string.gsub (str, "+", " ")
str = string.gsub (str, "%%(%x%x)",
function(h) return string.char(tonumber(h,16)) end)
str = string.gsub (str, "\r\n", "\n")
return str
end
要转义字符串str
中的%字符,您可以使用:
str:gsub("%%", "%%%%")
'%'字符被转义为'%%',并且需要在搜索模式和替换模式上进行转码(因此替换中的%字符数量)。
答案 1 :(得分:3)
您确定问题不在于gsub
loginurl
而不是loginstr
吗?
您的代码给了我这个错误(请参阅http://ideone.com/wwiZk):
lua: prog.lua:2: attempt to index global 'loginurl' (a nil value)
这听起来与你所看到的相似。只需修复它即可使用正确的变量:
print(loginstr:gsub( "{email}", "tester@test.com" ))
emailAddress=tester@test.com password={password}
根据需要。
答案 2 :(得分:0)
我在 value 部分中拥有此功能,因此您需要使用 value:gsub(“ %%”,“ %%%%”)来逃避价值。。 >
在json中替换“某些值”的示例:
local resultJSON = json:gsub(, "\"SOME_VALUE\"", value:gsub("%%", "%%%%"))