3

我有一段 lua 代码(在 Corona 中执行):

local loginstr = "emailAddress={email} password={password}"
print(loginstr:gsub( "{email}", "tester@test.com" ))

此代码生成错误:

无效的捕获索引

虽然我现在知道这是因为在 gsub 模式中没有正确指定花括号,但我不知道如何修复它。

我应该如何形成 gsub 模式,以便我可以用电子邮件地址值替换占位符字符串?

我浏览了所有我能找到的面向 lua 的网站,但大多数文档似乎都围绕着不相关的情况。

4

3 回答 3

7

正如我在上面的评论中所建议的,当电子邮件被编码为 URL 参数时,用于编码“@”字符的 %40 将用作捕获索引。由于搜索模式没有任何捕获(更不用说其中的 40 个),这将导致问题。

有两种可能的解决方案:您可以对编码字符串进行解码,或者对替换字符串进行编码以转义其中的“%”字符。根据您要对最终结果执行的操作,您可能需要同时执行这两项操作。

以下例程(我从这里挑选- 未测试)可以解码编码字符串:

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

要转义 string 中的 % 字符str,您可以使用:

str:gsub("%%", "%%%%")

'%' 字符被转义为 '%%',它需要在搜索模式和替换模式中都进行转义(因此替换中的 % 字符数量)。

于 2011-10-17T08:09:56.637 回答
3

你确定你的问题不是你想要解决的问题gsub吗?loginurlloginstr

你的代码给了我这个错误(见http://ideone.com/wwiZk):

lua: prog.lua:2: attempt to index global 'loginurl' (a nil value)

这听起来与您所看到的相似。只需修复它以使用正确的变量:

print(loginstr:gsub( "{email}", "tester@test.com" ))

说(见http://ideone.com/mMj0N):

emailAddress=tester@test.com password={password}

如预期的。

于 2011-10-16T21:51:22.143 回答
0

我在部分有这个,所以你需要使用:value:gsub("%%", "%%%%")来转义值。

在 json 中替换“一些值”的示例:

local resultJSON = json:gsub(, "\"SOME_VALUE\"", value:gsub("%%", "%%%%"))
于 2020-09-16T12:30:45.833 回答