String.match (Lua)

Материал из UoPilot
Версия от 11:19, 28 августа 2019; Tatikoma (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Описание

string.match - поиск первого вхождения шаблона в строку. Возвращает захваченные значения. Для поиска можно использовать регулярные выражения.

Синтаксис

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

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

Или:

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

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

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

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

Примеры

--lua
local str1 = "Координаты: X = 360, Y = 638"       -- строка
local num = str1:match("%d+")      -- найти первое число в строке
log(num)
--lua
local str1 = "Координаты: X = 360, Y = 638"      -- строка
local num1, num2 = string.match(str1, "(%d+)[^%d]+(%d+)")    -- найти 2 числа, между числами могут присутствовать любые символы
log(num1, num2)
--lua
log ("clear") log ("mode compact")
local str1 = "С 12:30 до 13:15 обед"      -- строка
local num1, num2, num3, num4 = str1:match("(%d+)[^%d]+(%d+)[^%d]+(%d+)[^%d]+(%d+)")    -- найти 4 числа, между числами могут быть любые символы
log(num1, num2)
log(num3, num4)
--lua
local a = "tr"
local b = 123
local tmp = tostring(a):match("%d+")   -- если переменная 'a' является числом вернёт true, иначе false
log (tmp)
tmp = tostring(b):match("%d+")   -- если переменная 'b' является числом вернёт true, иначе false
log (tmp)
--lua
local str1 = "Недавно Вася съел 15 яблок, обжора..."
local a = str1:match("[съел]+%s+(%d+)%s+[яблок]+")    -- найти число между 'съел' и 'яблок'
hint(a)     -- показать в сообщении, в правом нижнем углу экрана

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

Tonumber (Lua)
Tostring (Lua)
String.find (Lua)
String.gsub (Lua)
String.gmatch (Lua)
String.format (Lua)