Menu
CoddyTech

string.find()

Часть раздела Основы путешествия по Lua на Coddy. Урок 48 из 90.

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

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

string.find(text, pattern)

Если string.find() успешно находит шаблон, она возвращает два числа: начальную позицию и конечную позицию совпадения. Если шаблон не найден, она возвращает nil.

Вот простой пример:

local sentence = "The treasure is hidden here"
local start_pos, end_pos = string.find(sentence, "treasure")
print(start_pos, end_pos)  -- выводит: 5 12

В этом примере слово "treasure" начинается на позиции 5 и заканчивается на позиции 12 в предложении.

Важно знать: текст, который вы ищете, — это шаблон, а не обычный текст. Некоторые символы в шаблонах имеют особое значение: . % - + * ? [ ] ^ $ ( ). Вы изучите их позже в курсе. Буквы, цифры и пробелы соответствуют сами себе, как в примере выше, но специальный символ может соответствовать большему, чем вы подразумевали:

print(string.find("Score: 105", "1.5"))  -- выводит: 8 10 (символ . совпал с 0)

Чтобы найти текст точно в том виде, как он написан, добавь ещё два аргумента: 1 (начать с первого символа) и true (обычный поиск без специальных символов):

print(string.find("Score: 105", "1.5", 1, true))   -- выводит: nil
print(string.find("Version 1.5", "1.5", 1, true))  -- выводит: 9 11
challenge icon

Задание

Легко

Создай детектор секретных сообщений, который ищет скрытое кодовое слово в более длинном текстовом сообщении. Объяви переменную с именем message и присвой ей значение "The ancient treasure lies beneath the old oak tree". Используй функцию string.find(), чтобы найти слово "treasure" в сообщении и сохранить начальную и конечную позиции в переменных с именами startPos и endPos. Выведи оба значения позиций на отдельных строках.

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

-- Объявите переменную message
local message = "The ancient treasure lies beneath the old oak tree"

-- TODO: Напишите здесь код, который найдёт слово "treasure" и сохранит его позиции

-- Выведите позиции
print(startPos)
print(endPos)
quiz iconПроверьте себя

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

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Lua