regex
Настоящие регулярные выражения: match, find, replace.
Lua-паттерны (string.find, string.match, string.gsub) годятся для
простых случаев, но не умеют альтернативу (a|b), нежадные квантификаторы
или группы с квантификатором. regex — обычные регулярки поверх
стандартной библиотеки C++ (std::regex, синтаксис ECMAScript — тот же,
что в JavaScript/PCRE): без нового вендоренного движка, без 32-битной
сборки под него.
Скомпилированный паттерн кешируется по тексту (первый вызов с новым
паттерном платит за компиляцию, повторные — нет). Плохой паттерн — ошибка
Lua при первом использовании, а не тихий nil.
regex.match
Ищет совпадение и возвращает захваченные группы (или само совпадение, если групп нет).
Аргументы
Возвращает
Пример
Та же форма, что у string.match: с группами — значения групп, без групп —
всё совпадение целиком.
Синтаксис ECMAScript, не Lua-паттерны: \d вместо %d, \w вместо %w и
т.д. В Lua-строке экранируй бэкслеш: "\\d+", а не "\d+" — иначе
получится управляющая последовательность строки, а не буквальный
бэкслеш+d.
regex.find
Ищет совпадение и возвращает его границы.
Аргументы
Возвращает
Пример
Та же форма, что у string.find — str:sub(start, finish) всегда
восстанавливает совпадение.
regex.replace
Заменяет совпадения.
Аргументы
Возвращает
Пример
Названо replace, не gsub — это не Lua-паттерн, и «gsub» уже значит
что-то конкретное для тех, кто знает Lua.