我有一段 lua 代码(在 Corona 中执行):
local loginstr = "emailAddress={email} password={password}"
print(loginstr:gsub( "{email}", "tester@test.com" ))
此代码生成错误:
捕获索引无效
虽然我现在知道这是因为在 gsub 模式中没有正确指定花括号,但我不知道如何修复它。
我应该如何形成 gsub 模式,以便我可以用电子邮件地址值替换占位符字符串?
我浏览了所有我能找到的面向 lua 的网站,但大多数文档似乎都围绕着不相关的情况。
最佳答案
正如我在上面的评论中所建议的,当电子邮件被编码为 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("%%", "%%%%")
'%' 字符被转义为 '%%',并且在搜索模式和替换模式中都需要转义(因此替换中的 % 字符数量)。
关于regex - lua gsub 特殊替换产生无效的捕获索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7787509/