Skip to main content

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.findstr:sub(start, finish) всегда восстанавливает совпадение.

regex.replace

Заменяет совпадения.

Аргументы

Возвращает

Пример

Названо replace, не gsub — это не Lua-паттерн, и «gsub» уже значит что-то конкретное для тех, кто знает Lua.