String.find (Lua)

Материал из UoPilot
Перейти к навигации Перейти к поиску

Описание

string.find - возвращает позицию подстроки в строке. Для поиска можно использовать регулярные выражения.

Синтаксис

Привязка к окну: нет.
Работа со свернутым окном: да.
Параметры заключаются в скобки и разделяются запятыми.

string.find (<s>, <шаблон> [, стартовая_позиция_поиска [, true])

Или:

<s>:find(<шаблон> [, стартовая_позиция_поиска [, true]])

Где:
s - строка.
шаблон - что искать или регулярное выражение.
стартовая_позиция_поиска - стартовая позиция поиска, по умолчанию 1. Необязательный параметр.
true - если указано производится поиск подстроки как есть. Необязательный параметр.

Поддерживаемые опции регулярных выражений:

.	-- Любой символ
%a	-- Буква (только англ.!)
%A	-- Любая буква (русская), символ, или цифра, кроме английской буквы 
%c	-- Управляющий символ
%d	-- Цифра
%D	-- Любая буква, или символ, кроме цифры
%l	-- Буква в нижней раскладке (только англ.!)
%L	-- Любая буква, символ, или цифра, кроме английской буквы в нижней раскладке
%p	-- Символ пунктуации
%P	-- Любая буква, символ, или цифра, кроме символа пунктуации
%s	-- Символ пробел
%S	-- Любая буква, символ, или цифра, кроме символа пробела
%u	-- Буква в верхней раскладке (только англ.!)
%U	-- Любая буква, символ, или цифра, кроме английской буквы в верхней раскладке
%w	-- Любая буква, или цифра (только англ.!)
%W	-- Любой символ, или буква (русская), кроме английской буквы, или цифры
%x	-- Шестнадцатеричное число
%X	-- Любая буква, или символ,  кроме цифры, или английской буквы, используемой в записи шестнадцатеричного числа 
%z	-- Строковые параметры, содержащие символы с кодом 0

Примеры

--lua
local a = "New York"                        -- строка
local start_pos = string.find(a, "Yo")      -- искать начальную позицию Yo
log (start_pos)
--lua
local a = "New York"                                 -- строка
local start_pos, end_pos = string.find(a, "York")    -- искать начальную и конечную позицию York
log (start_pos, end_pos)
--lua
local a = "New York"                         -- строка
local start_pos, end_pos = a:find("York")    -- альтернативная запись функции 
log (start_pos, end_pos)
--lua
local a = "3 кг яблок и 3 кг груш"           -- строка
local start_pos = a:find("3")                -- найти число 3 в строке
log (start_pos)
start_pos = a:find("3", 2)             -- найти число 3 в строке, начиная со 2й позиции
log (start_pos)

Использование регулярных выражений

--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local start_pos, end_pos = str1:find("%d+")      -- найти позицию первого числа в строке
log(start_pos, end_pos)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local start_pos, end_pos, num1 = string.find(str1, "(%d+)")           -- найти позицию первого числа в строке и присвоить переменной num1
log(start_pos, end_pos, num1)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local _, _, num1 = string.find(str1, "(%d+)")    -- если позиции не нужны, то можно использовать _(нижнее подчёркивание)
log(num1)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local s, e, num1, num2 = string.find(str1, "(%d+), Y = (%d+)")    -- найти координаты X и Y, присвоить переменным num1 и num2
log(num1, num2)
-- или так
str1 = "Координаты: X = 123, Y = 547"      -- строка
s, e, num3, num4 = string.find(str1, "(%d+)[^%d]+(%d+)")    -- [^%d]* - означает любые символы, кроме числа
log(num3, num4)
--lua
log ("clear") log ("mode compact")
local str1 = "С 12:30 до 13:15 обед"      -- строка
local s, e, num1, num2, num3, num4 = str1:find("(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)")    -- найти 4 числа, между числами могут присутствовать любые символы
log(num1, num2)
log(num3, num4)

Смотрите также

Tonumber (Lua)
Tostring (Lua)
String.format (Lua)
String.match (Lua)
String.gmatch (Lua)
String.format (Lua)