Регулярные выражения в Lua

Символьный класс

Символьный класс используется, чтобы представить набор символов. Следующие комбинации используются для описания символьного класса:

•x: (где x - соответствует сам себе. (Он не может быть равен ни одному из волшебных символов ^$()%.[]*+-?).
•.: (точка) соответствует любому символу.
•%a: соответствует любой букве.
•%c: соответствует любому управляющему символу.
•%d: соответствует любой цифре.
•%l: соответствует любой букве в нижнем регистре.
•%p: соответствует любому символу пунктуации.
•%s: соответствует любому пробельному символу.
•%u: соответствует любой букве в верхнем регистре.
•%w: соответствует любому алфавитно-цифровые символу.
•%x: соответствует любой шестнадцатеричной цифре.
•%z: соответствует символу с представлением 0.
•%x: (где x - любой не алфавитно-цифровой символ), соответствует сам себе. Это - стандартный способ экранировки волшебных символов. Лучше следить за тем, чтобы любому символу пунктуации (даже не "волшебному") предшествовал '%', когда этот символ применен в шаблоне.
•[set]: соответствует любому символу из набора, заданного в set. Диапазон символов может быть определен, с помощью символа '-' отделяющего начало и конец диапазона. Все символьные классы %x описанные выше, могут использоваться как компоненты в наборе. Все другие символы в наборе представляются как есть. Например, [%w_] (или [_%w]) соответствует любому алфавитно-цифровому символу или символу подчеркивания, [0-9] соответствует любой десятичной цифре, и [0-9%l%-] соответствует любой десятичной цифре или любой букве в нижнем регистре или символу дефиса '-'.
Взаимодействие между диапазонами и классами не определено. Поэтому, наборы подобные [%a-z] или [a-%%] не имеют никакого значения.

•[^set]: Отрицательный набор символов. Соответствует любому символу, кроме тех, что заданы в наборе set. Содержимое набора интерпретируется аналогично описанному выше [set].
Для всех классов, представляемых одиночными символами (%a, %c, и т.п.), соответствующая прописная буква представляет отрицание класса. Например, %S представляет все НЕ пробельные символы.

Представления символа, пробела и других символьных групп зависят от текущих региональных установок. В частности, класс [a-z] не эквивалентен %l.

Элемент шаблона

Элементом шаблона может быть:

•Одиночный символьный класс, который соответствует любому одиночному символу из заданного класса;
•Одиночный символьный класс, сопровождаемый '*', что соответствует 0 или большему количеству повторений символов из заданного класса. Эти элементы повторения будут всегда соответствовать самой длинной возможной последовательности.
•Одиночный символьный класс, сопровождаемый '+', что соответствует 1 или большему количеству повторений символов из заданного класса. Эти элементы повторения будут всегда соответствовать самой длинной возможной последовательности.
•Одиночный символьный класс, сопровождаемый '-', что также соответствует 0 или большему количеству повторений символов из заданного класса. В отличие от *, элементы повторения будут всегда соответствовать самой короткой возможной последовательности;
•Одиночный символьный класс, сопровождаемый '?', что соответствует 0 или единственному вхождению символа из заданного класса;
•%n, при n от 1 до 9; такой элемент равняется n-й зафиксированной подстроке (см. ниже);
•%bxy, здесь x и y - два различных символа. Такой элемент соответствует строкам, которые начинаются с x, заканчиваются на y, и в них сбалансированы x и y. Это означает, что, если читать строку слева направо, подсчитывая +1 для x и -1 для y, то последний y является первым y, для которого счетчик равен 0. Например, элемент %b() соответствует выражениям со сбалансированными круглыми скобками.

Шаблон

Шаблон представляет собой последовательность описанных выше элементов. Символ '^' в начале шаблона, говорит о том, что заданная последовательность начинается с начала строки. Символ '$' в конце шаблона, говорит о том, что заданной последовательностью строка заканчивается. Символы '^' и '$', размещенные в других местах шаблона, не имеют никакого специального значения и представляются как есть.

Подшаблоны

В шаблон можно включить подшаблоны, выделив их круглыми скобками. Если найденная строка соответствует шаблону, то ее подстроки, соответствующие подшаблонам, будут доступны для будущего использования. Подшаблоны пронумерованы согласно их левым круглым скобкам. Например, в шаблоне "(a*(.)%w(%s*))", часть строки, соответствующая "a*(.)%w(%s*)" будет зафиксирована как первый подшаблон (и поэтому имеет номер 1); любые символы попавшие под соответствие "." будут зафиксированы как подшаблон номер 2, и часть строки, соответствующая "%s*" получит номер 3.

Специальный вариант использования подшаблонов - получение текущей позиции в строке. Для этого используются пустые подшаблоны (). Например, если мы применим шаблон "()aa()" к строке "flaaap", то получим два результата: 3 и 5.

Шаблон не может содержать вложенные ноли. Используйте %z вместо этого.
Смотрите также: Связанные действия