如何在Lua中转义变量

时间:2011-07-15 10:46:45

标签: escaping lua pattern-matching

有没有办法逃避Lua中的整个变量?像:

local blah = some_pattern
string.gsub(blah, "-", "%-")

变量“blah”发生变化,并在其他模式匹配中的其他地方使用。每当“blah”中有一个神奇的角色时,第二个模式匹配就会失败。

所以我需要至少在“等等”中处理各种魔法角色。

提前致谢!

3 个答案:

答案 0 :(得分:8)

最简单的方法是逃避所有标点字符而不用担心魔术字符:

newpattern = string.gsub(pattern, "%p", "%%%1")

答案 1 :(得分:3)

有点不清楚你在这里要求什么:在设置变量值时调用转义函数的方法,或者如何转义字符串以进行模式匹配。

变量只是存储值。设置局部变量时,不能导致一般操作发生。因此,如果您更改blah的值,则由您重新正确地转义字符串。

如果你问如何转义字符串以进行模式匹配,它将是这样的:

blah = blah:gsub(blah, "([...])", "%%%1")

其中...是您需要转义的字符列表。 Lua参考手册有一个可以使用的列表。请注意,由于这是一种模式,因此必须在此处转义这些字符

答案 2 :(得分:3)

使用this function

local escape_lua_pattern
do
  local matches =
  {
    ["^"] = "%^";
    ["$"] = "%$";
    ["("] = "%(";
    [")"] = "%)";
    ["%"] = "%%";
    ["."] = "%.";
    ["["] = "%[";
    ["]"] = "%]";
    ["*"] = "%*";
    ["+"] = "%+";
    ["-"] = "%-";
    ["?"] = "%?";
  }

  escape_lua_pattern = function(s)
    return (s:gsub(".", matches))
  end
end