string.find()
Часть раздела Логика и управление потоком путешествия по Lua на Coddy. Урок 37 из 54.
Теперь, когда вы понимаете классы символов, вы можете использовать их вместе с string.find(), чтобы искать шаблоны, а не точный текст. Это открывает широкие возможности для проверки и анализа текста.
Функция string.find() работает с шаблонами так же, как и с обычными строками. Она возвращает позицию первого совпадения с шаблоном:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Вывод: 5Это находит первую цифру в строке, которая находится на позиции 5. Также можно искать противоположное, используя классы символов в верхнем регистре:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Вывод: 1Здесь %D соответствует любому символу, не являющемуся цифрой, поэтому находит первую букву в позиции 1.
Распространённая задача проверки — определить, начинается ли строка с определённого шаблона. Чтобы находить совпадения только в начале строки, можно использовать якорь ^ в начале шаблона:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endЭтот шаблон проверяет, начинается ли строка с буквы, что делает его полезным для проверки ввода, когда требуются определённые форматы.
Чтобы найти сам специальный символ, например точку, либо экранируйте его с помощью %, либо отключите шаблоны, выполнив обычный поиск (1 — начать с первого символа, true — обычный поиск):
print(string.find("v1.5", "%.")) -- Вывод: 3 3
print(string.find("v1.5", ".", 1, true)) -- Вывод: 3 3
print(string.find("v1.5", ".")) -- Вывод: 1 1 (. соответствует любому символу)Задание
ЛегкоНапишите функцию startsWithLetter, которая принимает text и возвращает, начинается ли строка с буквы.
Используйте string.find() с якорем ^ и классом символов %a, чтобы проверить, начинается ли строка с буквы.
Параметры:
text(строка): строка для проверки
Возвращает: true, если строка начинается с буквы, и false в противном случае (логическое значение)
Попробуйте сами
function startsWithLetter(text)
-- Напишите код здесь
end
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордовПотренируйтесь самостоятельно: Онлайн-компилятор Lua