0Pricing
Lua Academy · Урок

Захваты и 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.com

string.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 — локальная установка не требуется.

Все уроки этого курса

  1. Синтаксис шаблонов Lua
  2. Захваты и string.match
  3. string.gmatch для токенизации
  4. string.gsub для преобразований
← Назад к Lua Academy