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Задание
ЛегкоСоздай детектор секретных сообщений, который ищет скрытое кодовое слово в более длинном текстовом сообщении. Объяви переменную с именем 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)В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы 2: Сравнение и логика
Операторы равенстваОператоры сравненияОператор 'and'Оператор 'or'Оператор 'not'Сокращенные вычисленияЗначения Truthy и FalsyИтоги: Простая логика7Основы условной логики
Оператор if-thenОператор if-then-elseОператор elseifИтоги — Сундук с сокровищами10Таблицы, часть 1: Списки
Что такое таблица?Создание таблицыДоступ к элементам по индексуИзменение элементов по индексуОператор длины '#'table.insert()table.remove()Итоги: управление участниками группы13Проект: Простой магазин зелий
Настройка проектаДобавление зелья2Переменные и типы данных
Что такое переменная?ЧислаСтрокиБулевы значенияЗначение 'nil'Функция type()Правила именованияИтоги — Профиль персонажа5Базовый вывод
Вывод литераловВывод переменныхВывод нескольких значенийОбъединение строк и переменныхФункция tostring()ВводПриведение типовПовторение — Отчет о состоянииПовторение — До 1208Основы работы со строками
string.len()string.upper и string.lowerstring.sub()string.rep()string.find()Повторение — Форматирование имени пользователя3Операторы 1: Арифметика и конкатенация
Арифметические операторыОператор остатка от деленияОператор возведения в степеньКонкатенация строкПриоритет операторовПовторение: Простые вычисления6Проект: Вывод характеристик персонажа
Приветственное сообщениеОбъявление характеристик персонажа9Основы функций
Объявление функцииВызов функцииФункции с параметрамиФункции с несколькими параметрамиОператор 'return'Повторение — Калькулятор площадиПотренируйтесь самостоятельно: Онлайн-компилятор Lua