lua gsub特殊替换生成无效捕获索引

时间:2011-10-16 21:38:45

标签: regex lua replace gsub

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

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

此代码生成错误:

无效的捕获索引

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

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

我查看了所有可以找到的面向浏览器的网站,但大多数文档似乎都围绕着无关联的情况。

3 个答案:

答案 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" ))

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

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

根据需要。

答案 2 :(得分:0)

我在 value 部分中拥有此功能,因此您需要使用 value:gsub(“ %%”,“ %%%%”)来逃避价值。。 >

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

local resultJSON = json:gsub(, "\"SOME_VALUE\"", value:gsub("%%", "%%%%"))