Стоит задача написать функцию быстрого прореживания текстового файла на Luа.
Файл html или javascript. На входе мы имеем string. Прореживать нужно большой блок, например так:
function lua_filter_bloсk ("<-- Great work begin -->","<--Great work done-->","Shit happens")
По сути нужна функция, которая просто ищет start и stop и заменяет весь текст между фрагментами на replace. На PHP эта функция могла бы выглядеть так:
function subs_filter_block ($start, $stop, $replace) {
global $result;
$start_pos = stripos ($result, $start);
if ($start_pos !== false) {
$end_pos = stripos($result, $stop);
if (($end_pos !== false) && ($start_pos < $end_pos)) {
$result =substr_replace ($result, $replace, $start_pos, ($end_pos - $start_pos + strlen($stop)));
}
}
return;
}
Теперь нужно это сделать на Lua. В учебных целях интересуют два крайних варианта — максимально просто и максимально быстро. Нужно ли обрабатывать данные как строку? Стоит ли преобразовать к таблице? Как?
Идеальным завершением была бы готовая ссылка на библиотечную функцию. К сожалению качество и актуальность документации по Lua не позволяет даже быстро найти есть ли нужная функция или библиотека. Интересные варианты я был бы готов проверить на производительность.
UPDATE 1. Первые два откликнувшихся не дали рабочего решения, но заставили провести тесты и прочитать мануал про паттерны ( не путать с regexp !)
В итоге получился такой вариант рабочего кода:
function subs_filter_block(startWord, endWord, replaceStr)
res = res:gsub(startWord .. "(.-)" .. endWord, replaceStr);
end
Остается понять как быстро работают Lua паттерны.