【问题标题】:how to escape a variable in Lua如何在 Lua 中转义变量
【发布时间】:2011-10-06 01:25:55
【问题描述】:
有没有办法在 Lua 中转义整个变量?喜欢:
local blah = some_pattern
string.gsub(blah, "-", "%-")
变量“blah”发生了变化,并在另一个模式匹配的其他地方使用。每当“blah”中有一个魔术字符时,在其他地方完成的第二个模式匹配就会失败。
所以我至少需要在“blah”中处理各种魔法字符的转义。
提前致谢!
【问题讨论】:
标签:
escaping
lua
pattern-matching
【解决方案1】:
有点不清楚您在这里要求什么:一种在设置变量值时调用转义函数的方法,或者如何转义字符串以进行模式匹配。
变量只是一个值的存储。当设置局部变量时,您不能导致发生一般操作。因此,如果您更改 blah 的值,则由您决定是否再次正确转义字符串。
如果您要询问如何转义字符串以进行模式匹配,应该是这样的:
blah = blah:gsub(blah, "([...])", "%%%1")
... 是您需要转义的字符列表。 Lua 参考手册有一个您可以使用的列表。请注意,由于这是一个模式,这些字符必须在此处转义。
【解决方案2】:
最简单的方法是转义所有标点符号,不用担心魔术字符:
newpattern = string.gsub(pattern, "%p", "%%%1")
【解决方案3】:
使用this function:
local escape_lua_pattern
do
local matches =
{
["^"] = "%^";
["$"] = "%$";
["("] = "%(";
[")"] = "%)";
["%"] = "%%";
["."] = "%.";
["["] = "%[";
["]"] = "%]";
["*"] = "%*";
["+"] = "%+";
["-"] = "%-";
["?"] = "%?";
}
escape_lua_pattern = function(s)
return (s:gsub(".", matches))
end
end