String.gsub (Lua)

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

Описание

string.gsub - возвращает копию строки, в которой все вхождения 'шаблона поиска' заменяются на 'шаблон замены', который может быть строкой, таблицей или функцией. Также возвращает как второе значение – общее количество проведенных подстановок.
Если 'шаблон замены' строка, то используется ее значение для замены. Символ % работает как символ со специальным назначением: любая последовательность в 'шаблоне замены' в виде %n, где n от 1 до 9, заменяется на n-ную захваченную подстроку. Последовательность %0 заменяется на найденную подстроку.
Если 'шаблон замены' является таблицей, то она запрашивается для каждого сравнения, с использованием первого захваченного значения как ключ; если шаблон не содержит захватов, то используется результат простого сравнения как ключ.
Если 'шаблон замены' является функцией, то эта функция вызывается каждый раз, когда обнаруживается совпадение. В качестве параметров ей передаются все захваченные подстроки; если шаблон не содержит захватов, то передается результат сравнения как один параметр.

Синтаксис

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

string.gsub (<s>, <шаблон поиска>, <шаблон замены>, [n])

Или:

<s>:gsub(<шаблон поиска>, <шаблон замены>, [n])

Где:
s - строка.
шаблон поиска - что искать или регулярное выражение.
шаблон замены - на что заменить.
n - сколько максимум раз можно сделать замену.

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

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

Примеры

--lua
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "hello world"          -- строка
log (str1)
local str2 = string.gsub(str1, "world", "user")    -- заменить 'world' на 'user'
log (str2)
--lua
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "one, two, three, four, five"   -- строка
log (str1)
local str2 = string.gsub(str1, ",", " -")    -- заменить ',' на ' -'
log (str2)
--lua
-- найти запятые, после которых нет пробела, и добавить пробел
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "one, two,three, four,five"     -- строка
log (str1)
local str2 = string.gsub(str1, ",", ", ")    -- заменить ',' на ', '
log (str2)
--lua
log ("clear") log ("mode compact")      -- очистить лог, компактный режим
local str1 = "Координаты: X = 360, Y = 638"    -- строка
log (str1)
local str2 = str1:gsub("(%d+)([^%d]+)(%d+)", "%3%2%1")  -- поменять координаты: X на Y и Y на X
log (str2)
--lua
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local t = {green = "red", black = "blue"}
local str1 = "green, black, black, green"      -- строка
log (str1)
local str2 = string.gsub(str1, "(%a+)", t)    -- заменить все слова 'green' на 'red' и 'black' на 'blue'
log (str2)
--lua
-- найти все числа в строке и умножить их на 2
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "green, 7, black, 12, green"      -- строка
log (str1)
local str2 = string.gsub(str1, "(%d+)", function(s) return s * 2 end)  -- функция вызывается каждый раз, когда обнаруживается совпадение
log (str2)

local str2, count = string.gsub(str1, "(%d+)", function(s) return s * 2 end)  -- в переменную count будет записано количество подстановок
log(str2)
log(count)
--lua
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "qwe1213rty"        -- строка
log (str1)
local str2 = string.gsub(str1, "%d", "")    -- удалить из строки все цифры
log (str2)
--lua
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "qwe1213rty"        -- строка
log (str1)
local str2 = string.gsub(str1, "%D", "")    -- удалить из строки все кроме цифр
log (str2)
--lua
log ("clear") log ("mode compact")    -- очистить лог, компактный режим
local str1 = "1 2 3 4 5 6 7 8 9"   -- строка
log (str1)
local str2 = string.format("%s" .. string.gsub(str1, " ", ", ") .. "%s", "(", ")")   -- добавить запятые между числами и заключить всю строку в скобки
log (str2)

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

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