Menu
Coddy logo textTech

Введение в строковые шаблоны

Часть раздела 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 соответствует любому символу, который не является буквой.

challenge icon

Задание

Легко

Напишите функцию 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
quiz iconПроверьте себя

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

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