Как написать парсер на LUA?
Насколько я знаю незахватывающего поиска нету, но по идее должно работать :)

testStr = "Hello Johny !";

function do_replace(inputStr, startWord, endWord, replaceStr)
  return string.gsub(inputStr, startWord .. " (%S+) " .. endWord, startWord .. " " .. replaceStr .. " " .. endWord);
end

result = do_replace(testStr, "Hello", "!", "habrahabr");
print(result);

Можно сделать использую string.gsub. Что-то вроде string.gsub(givenString, start… '(.*)'… stop, replace)
Это на regex'е.
Можно сделать эквивалент кода на php используюя соответсвующие функции из модуля string.