Menu
Coddy logo textTech

Итерация с помощью string.gmatch()

Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 39 из 54.

В то время как string.match() находит первое вхождение шаблона, что если вам нужно найти все совпадения в строке? Функция string.gmatch() решает эту задачу, возвращая итератор, который вы можете использовать в цикле for для последовательной обработки каждого совпадения.

Базовый синтаксис выглядит следующим образом:

for match in string.gmatch(text, pattern) do
    -- обработка каждого совпадения
end

Вот пример, который находит все числа в строке:

local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
    print(number)
end
-- Вывод:
-- 3
-- 5

Шаблон %d+ соответствует одной или нескольким цифрам, и цикл выполняется один раз для каждого найденного числа.

Вы также можете извлечь все слова из предложения:

local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
    print(word)
end
-- Output:
-- Lua
-- is
-- a
-- powerful
-- language
challenge icon

Задание

Легко

Напишите функцию extractHashtags, которая принимает text и возвращает все хэштеги, найденные в тексте, каждый на новой строке.

Используйте string.gmatch(), чтобы найти все хэштеги в тексте. Хэштег начинается с #, за которым следует одна или несколько букв.

Логика:

  • Используйте string.gmatch() с шаблоном "#%a+" для поиска всех хэштегов
  • Переберите каждое совпадение и соберите их
  • Объедините все хэштеги символами новой строки (\n)
  • Если хэштеги не найдены, верните пустую строку

Параметры:

  • text (string): Текст для поиска хэштегов

Возвращает: Все найденные хэштеги, каждый на отдельной строке. Если хэштегов нет, возвращает пустую строку (string)

Шпаргалка

Функция string.gmatch() возвращает итератор, который находит все вхождения шаблона в строке, позволяя обрабатывать каждое совпадение в цикле for.

Базовый синтаксис:

for match in string.gmatch(text, pattern) do
    -- обработка каждого совпадения
end

Пример поиска всех чисел:

local text = "I have 3 apples and 5 oranges"
for number in string.gmatch(text, "%d+") do
    print(number)
end
-- Вывод:
-- 3
-- 5

Пример извлечения всех слов:

local sentence = "Lua is a powerful language"
for word in string.gmatch(sentence, "%a+") do
    print(word)
end
-- Вывод:
-- Lua
-- is
-- a
-- powerful
-- language

Попробуйте сами

function extractHashtags(text)
    -- Напишите код здесь
end
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow