如何在Lua中转义一个变量



是否有一种方法可以在Lua中转义整个变量?如:

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

变量"blah"改变了,并在另一个模式匹配的其他地方使用。每当"blah"中有一个魔术字符时,在其他地方进行的第二次模式匹配就会失败。

所以我至少需要处理转义各种魔术字符,在"blah"中。

提前感谢!

最简单的方法是转义所有标点符号,而不用担心魔术字符:

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

使用此函数:

local escape_lua_pattern
do
  local matches =
  {
    ["^"] = "%^";
    ["$"] = "%$";
    ["("] = "%(";
    [")"] = "%)";
    ["%"] = "%%";
    ["."] = "%.";
    ["["] = "%[";
    ["]"] = "%]";
    ["*"] = "%*";
    ["+"] = "%+";
    ["-"] = "%-";
    ["?"] = "%?";
  }
  escape_lua_pattern = function(s)
    return (s:gsub(".", matches))
  end
end

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

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

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

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

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

最新更新