Lua Academy · Урок

string.gmatch для токенизации

Перебирайте все совпадения в строке с помощью string.gmatch.

Урок 3 из 413 шагов

«string.gmatch для токенизации» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Что такое string.gmatch?

string.gmatch(s, pattern) возвращает итератор, который последовательно возвращает все совпадения pattern в строке s.

Итерация по словам

Разделяйте строку на слова, находя последовательности символов, не являющихся пробелами.

local s = "the quick brown fox"
for word in s:gmatch("%S+") do
  print(word)
end

Сбор совпадений в таблицу

Соберите все совпадения в таблицу для дальнейшей обработки.

local function split(s, pat)
  local parts = {}
  for token in s:gmatch(pat) do
    parts[#parts+1] = token
  end
  return parts
end
local words = split("one two three", "%S+")
print(#words)  -- 3

Извлечение чисел

Извлекайте из строки все целые числа с помощью шаблона %d+.

local s = "x=10, y=20, z=30"
for n in s:gmatch("%d+") do
  print(tonumber(n))
end

Использование захватов в string.gmatch

Если шаблон содержит захваты, на каждой итерации возвращаются захваченные группы, а не совпадение целиком.

local s = "from=Alice, to=Bob, cc=Carol"
for k, v in s:gmatch("(%w+)=(%w+)") do
  print(k, "->", v)
end

Разбор CSV

Разделяйте строку CSV, захватывая всё содержимое между запятыми.

local csv = "apple,banana,cherry,date"
for field in (csv .. ","):gmatch("([^,]*),") do
  print(field)
end

Разбор пар ключ–значение

Разберите строку заголовка в стиле HTTP в таблицу пар ключ–значение.

local headers = "Content-Type: text/html; Content-Length: 1234"
local parsed = {}
for k, v in headers:gmatch("([%w%-]+): ([^;]+)") do
  parsed[k] = v:match("^%s*(.-)%s*$")
end

Подсчёт вхождений шаблона

Подсчитайте, сколько раз шаблон встречается в строке.

local function count(s, pat)
  local n = 0
  for _ in s:gmatch(pat) do n = n + 1 end
  return n
end
print(count("banana", "an"))  -- 2

Разбор предложений

Разделяйте текст на предложения, находя фрагменты до знаков пунктуации.

local text = "Hello. How are you? Fine!"
for sent in text:gmatch("[^.!?]+[.!?]?") do
  print(sent:match("^%s*(.-)%s*$"))
end

Сравнение string.gmatch и string.find в цикле

string.gmatch — предпочтительный способ перебрать все совпадения. Использование string.find в цикле while многословнее и чаще приводит к ошибкам.

Ограничения Unicode

Шаблоны Lua работают с байтами. Многобайтные символы UTF-8 могут неправильно сопоставляться с шаблонами для одного символа. Для полноценной поддержки Unicode используйте библиотеку UTF-8.

Вопрос о string.gmatch

По чему выполняется итерация в for w in s:gmatch("%S+") do?

Повторение: string.gmatch

string.gmatch — стандартный токенизатор Lua. Используйте его, чтобы разделять строки, извлекать все числа, разбирать пары ключ–значение и подсчитывать вхождения шаблона в удобном цикле с итератором.

Можно начать бесплатно

Изучай Lua с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
40
Уроки
159

Часто задаваемые вопросы

Урок «string.gmatch для токенизации» бесплатный?

Да — полный текст урока «string.gmatch для токенизации» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «string.gmatch для токенизации»?

Перебирайте все совпадения в строке с помощью string.gmatch. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «string.gmatch для токенизации»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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