Menu
Coddy logo textTech

string.match()

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

В то время как string.find() сообщает вам, где в строке появляется шаблон, иногда вам нужно извлечь сам текст, который совпал. Здесь на помощь приходит string.match(), и она становится еще мощнее в сочетании с захватами (captures).

Захваты позволяют помечать определенные части шаблона, которые вы хотите извлечь. Вы создаете захват, заключая часть шаблона в круглые скобки (). Когда string.match() находит совпадение, она возвращает захваченный текст вместо просто позиции.

Вот простой пример извлечения числа из строки:

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- Вывод: 100

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

Вы можете использовать захваты для извлечения определенных частей более сложного шаблона:

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- Вывод: Alice

Здесь скобки вокруг %a+ говорят Lua захватить последовательность букв, которая идет после "User: ". Остальная часть шаблона помогает найти нужную позицию, но возвращается только захваченная часть.

Если ваш шаблон содержит несколько захватов, string.match() возвращает их все как отдельные значения, которые вы можете присвоить нескольким переменным одновременно.

challenge icon

Задание

Легко

Напишите функцию extractPrice, которая принимает text и возвращает значение цены, найденное в строке.

Используйте string.match() с шаблоном захвата, чтобы извлечь числовую цену, которая следует за знаком доллара. Шаблон должен захватывать одну или несколько цифр, используя %d+.

Параметры:

  • text (string): Строка, содержащая цену в формате "Price: $XX"

Возвращает: Числовую цену в виде строки (string)

Шпаргалка

Используйте string.match() для извлечения текста, соответствующего шаблону:

local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number)  -- Вывод: 100

Модификатор + соответствует одному или нескольким символам предшествующего класса:

%d+  -- одна или более цифр
%a+  -- одна или более букв

Используйте круглые скобки () для создания захватов, которые извлекают определенные части шаблона:

local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username)  -- Вывод: Alice

Несколько захватов возвращают отдельные значения:

local var1, var2 = string.match(text, "(pattern1)(pattern2)")

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

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

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

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