Итерация с помощью 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Задание
ЛегкоНапишите функцию 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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа4Введение в метатаблицы
Что такое метатаблица?setmetatable и getmetatableМетаметод __indexМетаметод __newindexМетаметод __tostringАрифметические метаметоды. Часть 1Арифметические метаметоды. Часть 2Итоги — Таблица только для чтения7Продвинутая работа со строками
string.gsub() для подстановкиВведение в строковые шаблоныstring.find()string.match()Итерация с помощью string.gmatch()Итоги — Парсер лог-файлов2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов