Вот полное решение.
local function processEscapes(str)
return (str:gsub("\\u{(%x+)}", function(hex) return utf8.char(tonumber(hex, 16)) end)
:gsub("\\(%d%d?%d?)", function(dec) return string.char(tonumber(dec, 10)) end)
:gsub("\\x(%x%x)", function(hex) return string.char(tonumber(hex, 16)) end)
:gsub("\\z%s*", "") -- skip whitespace
:gsub("\\\n", "\n")
:gsub("\\([abfnrtv\\\"'])", {
a = "\a",
b = "\b",
f = "\f",
n = "\n",
r = "\r",
t = "\t",
v = "\v",
["\\"] = "\\",
['"'] = '"',
["'"] = "'",
}))
:gsub("\\(.)", function(c) error("invalid escape sequence: \\" .. c) end)
end
P. S. Форум убивает форматирование, не спрашивая меня.