Как я уже говорил в комментариях выше, когда электронное письмо закодировано как параметр URL,% 40, используемый для кодирования символа '@', будет использоваться в качестве индекса захвата.Поскольку шаблон поиска не имеет никаких захватов (не говоря уже о 40 из них), это вызовет проблему.
Существует два возможных решения: вы можете либо декодировать закодированную строку, либо кодировать вашу строку замены вэкранируйте символ '%' в нем.В зависимости от того, что вы собираетесь делать с конечным результатом, вам может потребоваться выполнить оба действия.
следующая процедура (я выбрал здесь - не проверено) может декодировать закодированную строку:
function url_decode(str)
str = string.gsub (str, "+", " ")
str = string.gsub (str, "%%(%x%x)",
function(h) return string.char(tonumber(h,16)) end)
str = string.gsub (str, "\r\n", "\n")
return str
end
Для экранирования символа% в строке str
, вы можете использовать:
str:gsub("%%", "%%%%")
Символ '%' экранируется как '%%', и ему необходимобыть добавленным как в шаблон поиска, так и в шаблон замены (следовательно, количество символов% в замене).