Вы делаете вещи намного сложнее, чем нужно.
Один вызов string.gsub()
делает то, что вы хотите, и все, что вам нужно сделать, это построить шаблон для того, что вы хотите сопоставить, чтоэто очень просто.
Единственное, что нужно учитывать, если вы хотите построить шаблон, содержащий магические символы, такие как %
или .
, вам придется сначала их избежать,это тоже не сложно, но, похоже, это не относится к вашему делу, так как ваш префикс состоит только из буквенных символов.
function foo(str, prefix, replacement)
return str:gsub(prefix..string.rep("%x", 16), replacement)
end
Это должно делать то, что вы хотите, просто отлично.
string.rep("%x", 16)
, как следует из названия, повторяет строку 16 раз, создавая шаблон Lua, который соответствует 16 шестнадцатеричным цифрам.