Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
[Обучение] Базовая библиотека Lua.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
57.24 Кб
Скачать

Поиск и замена

string.find(s, pat [, start [, plain]])

Ищет первое вхождение паттерна pat в строке s. Если паттерн найден, то функция возвращает позиции его начала и конца, в противном случае возвращается nil. Если паттерн содержит пометки, то их значения возвращаются как дополнительные значения. Необязательный аргумент start задает позицию, с которой начинается поиск (умалчиваемое значение 1). Если в аргументе plain передать значение true, то в паттерне специальные символы теряют свой специальный смысл.

string.match(s, pat [, start])

Ищет первое вхождение паттерна pat в строку s. Если паттерн не содержит пометок, то функция возвращает подстроку, соответствующую паттерну. Если паттерн содержит пометки, то функция возвращает подстроки, соответствующие пометкам. Если паттерн не найден, то функция возвращает nil. Необязательный аргумент start задает позицию, с которой начинается поиск (умалчиваемое значение 1).

string.gmatch(s, pat)

Возвращает функцию-итератор, которая на каждой итерации возвращает подстроку, соответствующую паттерну. Если паттерн содержит пометки, то возвращается набор значений пометок.

string.sub(s, i [, j])

Возвращает подстроку, начиная с позиции i и до позиции j включительно. Оба индекса могут быть отрицательными. Умалчиваемое значение j = -1.

string.gsub(s, pat, repl [, n])

Возвращает копию строки s, в которой все вхождения паттерна pat заменены на строку, заданную аргументом repl. Дополнительно возвращается число сделанных замен. Если repl  —  строка, то вхождения паттерна заменяются на строку repl, в которой все вхождения последовательности символов вида '%n' (n = 1...9) заменяются на значения группы с соответствующим номером. Если repl  —  функция, то для каждого вхождения паттерна эта функция вызывается со значениями групп, переданными в качестве аргументов, а возвращаемое значение используется для замены. Если в паттерне нет групп, то в функцию передается вся подстрока, соответствующая паттерну. Если функция возвращает строку, то подставляется эта строка, в противном же случае (false или nil) замена не производится. Необязательный аргумент n задает максимальное число производимых замен.

Паттерны

В Lua паттерн представляет собой обычную строку, в которой некоторые символы интерпретируются специальным образом. В такой строке можно использовать обычные для строк правила экранирования символом '\', поскольку в самих паттернах для экранирования используется символ '%'.

Следующие специальные последовательности определяют классы символов:

'%z' нулевой символ

'%s' пробельный символ

'%l' буква в нижнем регистре

'%u' буква в верхнем регистре

'%a' буква

'%d' цифра

'%x' шестнадцатеричная цифра

'%w' буква или цифра

'%p' символ пунктуации

'%с' управляющий символ

Для любого класса символов, представленного последовательностью '%буква' соответствующий класс с той же буквой в верхнем регистре задает дополнительный класс символов.

В паттернах большинство символов имеют обычный смысл, кроме символов %.^$()*-+?[], интерпретируемых специальным образом. Символы, имеющие специальный смысл экранируются символом '%'.

'%' экранирование или придание специального смысла

'.' любой символ

'^' начало строки

'$' конец строки

'(...)' группа

'%d' (d -- цифра) группа с номером d

'*' 0 или больше символов

'-' 0 или больше символов (кратчайшее соответствие)

'+' 1 или больше символов

'?' 0 или 1 символ

'[...]' множество символов

'[^...]' отрицание множества символов

%bxy участок строки между сбалансированными символами

Во всех случаях для символов из класса '%W' символ '%' означает экранирование символа. Аналогично для символов из класса '%w' символ '%' всегда означает придание символу специального смысла.

Внутри множества символов можно перечислять символы, классы символов (например '%a') и диапазоны символов (например '0-7'). Символ '-' внутри множества приобретает специальный смысл. Аналогично символ '^', следующий непосредственно за символом '[' означает переход к дополнительному множеству.

паттерн '%bxy' служит для выделения участка строки, ограниченного сбалансированными символами 'x' и 'y' .

Участки паттерна могут быть заключены в круглые скобки. Такие участки называются группами. Участок строки, соответствующий группе, называется значением группы. Паттерн '%d' (d  —  цифра) соответствует значению группы с номером d. Такой паттерн можно использовать как внутри самого регулярного выражения, так и в строке замены. Пустая группа вида '()' получает в качестве значения свою позицию в строке.