Захваты и string.match
Извлекайте захваченные группы из строк с помощью string.match и захватов ().
«Захваты и string.match» — бесплатный урок Lua Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Что такое захваты?
Захваты — это заключённые в скобки подшаблоны в шаблонах Lua. Они извлекают подстроки из совпавшего текста.
string.match и захваты
Если шаблон содержит захваты, string.match возвращает захваченные подстроки вместо совпадения целиком.
local date = "2025-01-15"
local y, m, d = date:match("(%d+)-(%d+)-(%d+)")
print(y, m, d) -- 2025 01 15Один захват
Один захват возвращает одно строковое значение.
local s = "name: Alice"
local name = s:match("name: (%a+)")
print(name) -- AliceНесколько захватов
Несколько захватов возвращаются как несколько значений.
local pair = "key = value"
local k, v = pair:match("(%w+)%s*=%s*(%w+)")
print(k, v) -- key valueПозиционные захваты ()
Пустой захват () захватывает текущую позицию в строке как число.
local s = "hello world"
local pos = s:match("()world")
print(pos) -- 7 (position where world starts)Необязательные захваты
Чтобы захватить необязательную часть, добавьте ? после группы захвата.
local s = "http://example.com"
local protocol, host = s:match("(https?)://([^/]+)")
print(protocol, host) -- http example.comstring.find и захваты
string.find с захватами возвращает начальный и конечный индексы, а затем захваченные подстроки.
local s = "phone: 555-1234"
local i, j, num = s:find("phone: (%d+-%d+)")
print(i, j, num) -- 1 16 555-1234Вложенные захваты
Захваты могут быть вложенными. Они нумеруются слева направо по открывающей скобке.
local s = "2025-01-15"
local full, year = s:match("((%d%d%d%d)-%d%d-%d%d)")
print(full, year) -- 2025-01-15 2025Рекомендации по использованию захватов
Используйте переменные с понятными именами. Не создавайте слишком глубокую вложенность захватов. При отсутствии совпадения возвращается nil — всегда проверяйте результат перед использованием захватов.
local result = s:match("(%d+)")
if result then print("found:", result)
else print("no match") endПоиск адресов электронной почты
Простой шаблон адреса электронной почты с захватами (не соответствует стандарту RFC).
local email = "user@example.com"
local user, domain = email:match("([^@]+)@(.+)")
print(user, domain) -- user example.comТаблица всех совпадений
Чтобы собрать все совпадения в таблицу, используйте string.gmatch (это рассматривается в следующем уроке).
Вопрос о захватах
Что возвращает "2025-01-15":match("(%d+)-(%d+)-(%d+)")?
Повторение: захваты и string.match
Захваты используют () в шаблонах для извлечения подстрок. string.match напрямую возвращает захваченные значения. Пустой () захватывает позиции. Всегда проверяйте результат поиска на nil.
Часто задаваемые вопросы
Урок «Захваты и string.match» бесплатный?
Да — полный текст урока «Захваты и string.match» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Захваты и string.match»?
Извлекайте захваченные группы из строк с помощью string.match и захватов (). Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Захваты и string.match»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Синтаксис шаблонов Lua
- Захваты и string.match
- string.gmatch для токенизации
- string.gsub для преобразований