Автор: Lexua
Дата сообщения: 30.03.2012 20:31
Накопал немного инфы по регулярным выражениям в Lua. Может кому-то пригодится
[more] Захват строк с помощью регулярных выражений в Lua
+, ? и * - это квантификаторы. Если после […] или (…) идет +, это обозначает, что то, что стоит в скобках должно появиться в выражении НЕ менее 1 раза, но максимум не ограничен. ? - то, что в скобках может появиться, а может и нет, но появиться не более 1 раза. * - выражение может появиться, а может и нет неограниченное кол-во раз. \[\] - это комбинация [] Просто напрямую ее прописать невозможно, т.к. квадратные скобки используются для описания массива символов. Поэтому их защищают с помощью \. Комбинация \[ интерпретируется не как открытие массива, а как [
Некоторая информация и примеры захватов в языке LUA .
Магические символы: ( ) . % + - * ? [ ^ $ перед всеми магическими символами нужно ставить '%', иначе язык будет воспринимать эти символы по своему (используется в захватах символов).
. - любой символ
%a - буквы
%с - контрольные символы
%d - десятичные цифры
%u - буквы верхнего регистра
%l - буквы нижнего регистра
%p - знаки пунктуации
%s - символы пробела
%w - текстовые символы
%z - символ 0
local s, e, sArg1 = string.find(sSTR, »(.*)») - захват всей строки;
local s, e, sArg2 = string.find(sSTR, »/(.*)/») - захват всего, что находится между крайними символами /
local s, e, sArg3 = string.find(sSTR, »/(.-)/») - захват всего, что находится между первыми(встретившимися) двумя символами /
local s, e, сArg4 = string.find(sSTR, »(%S)») - захват первого символа строки;
local s, e, sArg5 = string.find(sSTR, »(%S*)») - захват первого слова;
local s, e, sArg6 = string.find(sSTR, »%S*%s*(%S*)») - захват второго слова;
local s, e, sArg7, sArg8 = string.find(sSTR, »(%S*)%s*(%S*)») - захват первого и второго слова;
local s, e, sArg9 = string.find(sSTR, »(%S.)») - захват первых двух букв;
local s, e, sArg10 = string.find(sSTR, »(why)») - захват why (в любом месте);
local s, e, sArg11 = string.find(sSTR, «^(why)») - захват why только если оно стоит на первых трёх(в данном случае) позициях;
local s, e, sArg12 = string.find(sSTR, »(why)$») - захват why только если оно стоит на последних трёх(в данном случае) позициях;
local s, e, sArg13, iArg14 = string.find(sSTR, »(%S+)%s*(%d*)») - захват слова и числа (слово и число разделены пробелом);
local s, e, iArg15 = string.find(sSTR, »(%d*%.%d*%.%d*%.%d*)») - захват четырёх чисел, разделённых точками (например ip адрес);
local s, e, iArg16, iArg17, iArg18 = string.find(sSTR, »(%d*%.%d*%.%d*%.%d*)%s*(%d*)%s*(.*)») - захват чисел, разделённых точками, захват числа, захват всего оставшегося (все захватываемые элементы разделены пробелами);
local s, e, сArg19, sArg20, sArg21 = string.find(sSTR, »%b<>%s+(%S)(%S+)%s*(.*)») - захват первого символа, сразу после текста, ограниченного символами < >, второй захват слова сразу после захваченного символа, третий захват - захват всего оставшигося после пробела.
Смысл букв в начале переменных очень прост: Эти буквы указывают на тип локальной переменной: s - String, c - Char, i - Integer, b - bool.
Смысл переменных s и e также прост: s, e - переменные в которые заносится положения начала строки и конец строки. s - Start, e - End. sSTR - данные, в которых происходят захваты. [/more]
Может кто из гуру её ещё дополнит, то можно в принципе и в русскую справку прикрутить. Думаю было бы полезно.