是否有一种方法可以在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参考手册中有一个您可以使用的列表。注意,由于这是一个模式,这些字符必须在这里转义。