<< Click to Display Table of Contents >> Navigation: Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Работа со строками > Образцы |
Класс символов используется для представления набора символов. Следующие комбинации допустимы в описании класса символов:
x: (где x не является одним из вoлшeбныx символов ^$()%.[]*+-?) предстваляет сам символ x.
.: (точка) представляет все символы.
%a: представляет все буквы.
%c: представляет все управляющие символы.
%d: представляет все цифры.
%l: представляет все строчные буквы.
%p: представляет все знаки пунктуации.
%s: представляет все символы пробела.
%u: представляет все прописные буквы.
%w: представляет все буквенно-цифровые символы.
%x: представляет все шестнадцатеричные цифры.
%z: представляет символ с представлением 0.
%x: (где x не является буквенно-цифровым символом) представляет символ x. Это стандартный путь замены вoлшeбныx символов. Перед любым знаком пунктуации (даже вoлшeбным) может быть ’%’, когда требуется указать сам знак в образце.
[set]: представляет класс, который является объединением всех символов в наборе. Диапазон символов может быть указан путем отделения последнего символа диапазона с помощью ’-’. Все классы %x, описанные выше, также могут быть использованы как компоненты в наборе. Все другие символы в наборе представляют самих себя. Например, [%w_] (or [_%w]) представляет все буквенно-цифровые символы плюс знак подчеркивания, [0-7] представляет восьмеричные цифры, а [0-7%l%-] представляет восьмеричные цифры плюс строчные буквы плюс символ ’-’.
Взаимодействие между диапазонами и классами не определено. Поэтому образцы наподобие [%a-z] или [a-%%] не имеют смысла.
[^set]: представляет дополнение набора, где набор интерпретируется как в предыдущем пункте.
Для всех классов, представленных одиночными буквами (%a, %c и т.д.), соответствующие прописные буквы представляют дополнение к классу. Например, %S представляет все символы, отличные от пробела.
Определения буквы, пробела и других групп символов зависит от локализации. В частности, класс [a-z] может не быть эквивалентным %l.
В качестве элемента образца может выступать:
односимвольный класс, который совпадает с любым одиночным символом в классе;
односимвольный класс, после которого следует ’*’, который совпадает с 0 или большим количеством повторений символов в классе. Эти повторяющиеся элементы всегда удовлетворяют самой длинной возможной последовательности;
односимвольный класс, после которого следует ’+’, который совпадает с 1 или большим количеством повторений символов в классе. Эти повторяющиеся элементы всегда удовлетворяют самой длинной возможной последовательности;
односимвольный класс, после которого следует ’-’, который совпадаетс 1 или большим количеством повторений символов в классе. Эти повторяющиеся элементы всегда удовлетворяют самой короткой возможной последовательности;
односимвольный класс, после которого следует ’?’, который совпадает с 0 или 1 повторением символа в классе;
%n, где n между 1 и 9; этот элемент совпадает с подстрокой, равной n-ой захваченной строке (см. ниже);
%bxy, где x и y – два разных символа; такой элемент совпадает со строкой, которая начинается с x, заканчивается y, и в которой x и y сбалансированы. Это означает, что если читать строку слева направо, прибавляя +1 к x и -1 к y, завершающий y есть первый y, где счет достигает 0. Например, элемент %b() удовлетворяет выражению со сбалансированными круглыми скобками.
Образец – это последовательность элементов. ’^’ в начале образца указывает поиск совпадений с начала строки. ’$’ в конце образца указывает поиск совпадений с конца строки. В других позициях ’^’ и ’$’ не имеют специального смысла и представляют самих себя.
Образец может содержать под-образцы, заключенные в круглые скобки, эти под-образцы описывают зaxвaты. Когда поиск совпадения успешен, подстроки анализируемой строки, которые удовлетворяют захватам, сохраняются для дальнейшего использования. Захваты нумеруются в соответствии со своей левой круглой скобкой. Например, в образце "(a*(.)%w(%s*))" часть строкового совпадения "a*(.)%w(%s*)" сохраняется как первый захват (и поэтому имеет номер 1); символьное совпадение "." – это захват номер 2, а часть совпадения "%s*" – захват номер 3.
В специальном случае, пустой захват () захватывает позицию текущей строки (число). Например, если мы применим образец "()aa()" к строке "flaaap", получим два захвата – 3 и 5.
Образец не может иметь вложенных нулей, используйте вместо этого %z.