Введение в строковые шаблоны
Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 36 из 54.
Когда вы использовали string.gsub() в предыдущем уроке, вы искали точный текст, такой как пробелы или конкретные слова. Но что, если вам нужно найти «любую цифру» или «любую букву», не зная конкретного символа? Здесь на помощь приходят строковые паттерны.
Шаблоны строк в Lua — это способ описать, какой текст вы ищете, а не сам точный текст. Они проще, чем регулярные выражения, но достаточно мощны для большинства задач по обработке текста.
Lua предоставляет специальные коды, называемые символьными классами, которые соответствуют категориям символов. Вот наиболее распространенные из них:
%d -- соответствует любой цифре (0-9)
%a -- соответствует любой букве (a-z, A-Z)
%s -- соответствует любому пробельному символу (пробел, табуляция, новая строка)
%w -- соответствует любому буквенно-цифровому символу (буквы и цифры)
%p -- соответствует любому символу пунктуацииВот как вы можете использовать эти шаблоны с string.find(), чтобы найти первую цифру в строке:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Вывод: 6Вы также можете использовать версии этих классов в верхнем регистре для поиска противоположных совпадений. Например, %D соответствует любому символу, который не является цифрой, а %A соответствует любому символу, который не является буквой.
Задание
ЛегкоНапишите функцию containsDigit, которая принимает text и возвращает, содержит ли текст хотя бы одну цифру.
Используйте string.find() с классом символов %d, чтобы проверить, есть ли в строке цифры.
Параметры:
text(string): Текст для проверки на наличие цифр
Возвращает: true, если текст содержит хотя бы одну цифру, false в противном случае (boolean)
Шпаргалка
Шаблоны строк в Lua описывают, какой текст вы ищете, а не сам конкретный текст.
Lua предоставляет специальные коды, называемые символьными классами, которые соответствуют категориям символов:
%d -- соответствует любой цифре (0-9)
%a -- соответствует любой букве (a-z, A-Z)
%s -- соответствует любому пробельному символу (пробел, табуляция, новая строка)
%w -- соответствует любому буквенно-цифровому символу (буквы и цифры)
%p -- соответствует любому символу пунктуацииВы можете использовать версии в верхнем регистре для поиска противоположного. Например, %D соответствует любому символу, который не является цифрой, а %A соответствует любому символу, который не является буквой.
Использование символьных классов с string.find():
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Вывод: 6Попробуйте сами
function containsDigit(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()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов