Функции работы со строками в QLua(Lua)

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 14, среднее: 5,00 из 5)
Загрузка...

Qlua-основы
string.byte

S = "Текст";
string.byte(S, i); -- Возвращает числовой код символа в строке по индексу i
   -- i (необязательный параметр) - начальный индекс (по умолчанию, 1)
S:byte(i); -- Эквивалентно
 
string.byte(S, 1); -- Вернет 210
string.byte(S, 2); -- Вернет 229
string.byte(S, 3); -- Вернет 234
string.byte(S, 4); -- Вернет 241
string.byte(S, 5); -- Вернет 242


string.char

string.char(n,...);               -- Возвращает символы по числовым кодам, может принимать любое количество кодов через запятую
string.char(210);                 -- Вернет "Т"
string.char(210,229,234,241,242); -- Вернет "Текст"

string.dump

string.dump(func); -- Возвращает двоичное представление функции func

string.find

-- Ищет вхождение подстроки в строку и возвращает индекс начала вхождения, или nil, если совпадение не найдено
S = "Текст";
string.find(S,"екс"); -- Вернет 2
S:find("екс"); -- Эквивалентно
-- В строке поиска можно использовать регулярные выражения


string.format

-- Выводит отформатированную строку
string.format("quik%scsharp%s", "lua", ".ru"); -- Вернет строку "quikluacsharp.ru"
 
-- Поддерживаемые опции:
%a	-- Шестнадцатеричное в виде 0xh.hhhhp+d (только С99)
%A	-- Шестнадцатеричное в виде 0Xh.hhhhP+d (только С99)
%c	-- Символ по коду
%d	-- Десятичное целое со знаком
%i	-- Десятичное целое со знаком
%e	-- Экспоненциальное представление ('е' на нижнем регистре)
%E	-- Экспоненциальное представление ('Е' на верхнем регистре)
%f	-- Десятичное с плавающей точкой
%g	-- В зависимости от того, какой вывод будет короче, используется %е или %f
%G	-- В зависимости от того, какой вывод будет короче, используется %Е или %F
%o	-- Восьмеричное без знака
%s	-- Строка символов
%u	-- Десятичное целое без знака
%x	-- Шестнадцатеричное без знака (буквы на нижнем регистре)
%X	-- Шестнадцатеричное без знака (буквы на верхнем регистре)
%p	-- Выводит указатель
%n	-- Аргумент, соответствующий этому спецификатору, должен быть указателем на целочисленную переменную. Спецификатор позволяет сохранить в этой переменной количество записанных символов (записанных до того места, в котором находится код %n)
%%	-- Выводит знак %

string.match

string.match (S, "шаблон", i); -- Ищет первое вхождение "шаблона" в строку S, при нахождении, возвращает совпадение, иначе nil
   -- i (необязательный параметр) - указывает с какого по счету символа начинать поиск (по-умолчанию, 1)
S:match ("шаблон", i); -- Эквивалентно

string.gmatch

string.gmatch (S, "шаблон"); -- Возвращает итератор, который, при каждом вызове, возвращает следующее вхождение шаблона в S
S:gmatch("шаблон"); -- Эквивалентно
-- Пример:
Str = "Привет, Мир!";
for S in string.gmatch (Str, "р") do
-- какой-то код
end;
-- Данный цикл совершит 2 итерации, каждый раз помещая в переменную S букву "р"

string.gsub

string.gsub(S, "Шаблон поиска", "Шаблон замены", n); -- Возвращает копию S, в которой все вхождения "Шаблона поиска" заменяются на "Шаблон замены", который может быть строкой, таблицей или функцией, вторым значением возвращает общее количество проведенных подстановок
   -- в "Шаблоне замены" символ % работает как символ со специальным назначением: любая последовательность в виде %n, где n от 1 до 9, заменяется на n-ную захваченную подстроку
   -- n (необязательный параметр) - указывает сколько максимум раз можно сделать подстановку
S:gsub("Шаблон поиска", "Шаблон замены", n); -- Эквивалентно
 
-- Примеры:
string.gsub("Привет, Мир!", "Мир", "Lua"); -- Вернет "Привет, Lua!"
string.gsub("Привет, Мир!", "Мир", "%1%1"); -- Вернет "Привет, МирМир!"

string.len

string.len(S); -- Возвращает длину строки S
S:len(); -- Эквивалентно
#S;      -- Эквивалентно

string.upper

string.upper(S); -- Возвращает копию строки S, где все буквы в нижнем регистре заменены на буквы в верхнем регистре
S:upper(); -- Эквивалентно

string.lower

string.lower(S); -- Возвращает копию строки S, где все буквы в верхнем регистре заменены на буквы в нижнем регистре
S:lower(); -- Эквивалентно

string.rep

string.rep(S,n); -- Возвращает строку, которая содержит n копий строки S
S:rep(n); -- Эквивалентно

string.reverse

string.reverse(S); -- Возвращает строку, в которой символы строки S расположены в обратном порядке
S:reverse(); -- Эквивалентно

string.sub

string.sub(S, i, j); -- Возвращает подстроку строки S, которая начинается с символа с индексом i и заканчивается символом с индексом j
   -- j (необязательный параметр) - по-умолчанию, индекс последнего символа
S:sub(i,j); -- Эквивалентно

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

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

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Функции работы со строками в QLua(Lua): 65 комментариев

  1. Здравствуйте.
    Функции string.upper и string.lower не хотят работать с русскими символами.

    1
    2
    3
    4
    5
    6
    7
    
    local tx1 = "Hello World";
    local tx2 = "Привет Мир";
    local up1 = string.upper(tx1);
    local lo1 = string.lower(tx1);
    local up2 = string.upper(tx2);
    local lo2 = string.lower(tx2);
    message(up1 .. " | " .. lo1 .. "\n" .. up2 .. " | " .. lo2);

    Результат:
    HELLO WORLD | hello world
    Привет Мир | Привет Мир

    Есть идеи как написать не сложную свою функцию по работе с русскими символами?