有没有办法逃避Lua中的整个变量?像:
local blah = some_pattern
string.gsub(blah, "-", "%-")
变量“blah”发生变化,并在其他模式匹配中的其他地方使用。每当“blah”中有一个神奇的角色时,第二个模式匹配就会失败。
所以我需要至少在“等等”中处理各种魔法角色。
提前致谢!
答案 0 :(得分:8)
最简单的方法是逃避所有标点字符而不用担心魔术字符:
newpattern = string.gsub(pattern, "%p", "%%%1")
答案 1 :(得分:3)
有点不清楚你在这里要求什么:在设置变量值时调用转义函数的方法,或者如何转义字符串以进行模式匹配。
变量只是存储值。设置局部变量时,不能导致一般操作发生。因此,如果您更改blah
的值,则由您重新正确地转义字符串。
如果你问如何转义字符串以进行模式匹配,它将是这样的:
blah = blah:gsub(blah, "([...])", "%%%1")
其中...
是您需要转义的字符列表。 Lua参考手册有一个可以使用的列表。请注意,由于这是一种模式,因此必须在此处转义这些字符。
答案 2 :(得分:3)
local escape_lua_pattern
do
local matches =
{
["^"] = "%^";
["$"] = "%$";
["("] = "%(";
[")"] = "%)";
["%"] = "%%";
["."] = "%.";
["["] = "%[";
["]"] = "%]";
["*"] = "%*";
["+"] = "%+";
["-"] = "%-";
["?"] = "%?";
}
escape_lua_pattern = function(s)
return (s:gsub(".", matches))
end
end