如何在Lua中转义变量

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

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

变量"blah"会改变,并且在另一个模式匹配中的其他地方使用。每当“blah”中有一个特殊字符时,第二个模式匹配就会失败。

因此,我需要处理至少在“blah”中转义各种特殊字符。

提前感谢!

原文链接 https://stackoverflow.com/questions/6705872

点赞
stackoverflow用户734069
stackoverflow用户734069

这里有一点不太清楚:你是想寻找一种方法,在每次变量的值被设置时都调用你的转义函数,还是想了解如何为模式匹配转义字符串。

一个变量只是一个存储值的空间。你不能在本地变量被设置时执行普通操作。因此,如果你改变了 blah 的值,你需要再次正确地转义字符串。

如果你想知道如何为模式匹配转义字符串,可以这么做:

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

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

2011-07-15 10:57:20
stackoverflow用户107090
stackoverflow用户107090

最简单的方法是转义所有标点符号并不必担心魔法字符:

newpattern = string.gsub(pattern, "%p", "%%%1")
2011-07-15 10:59:29
stackoverflow用户6236
stackoverflow用户6236

使用这个函数

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

  escape_lua_pattern = function(s)
    return (s:gsub(".", matches))
  end
end
2011-07-15 13:34:34