ГЛАВА 2. ОБРАБОТКА РЕГУЛЯРНОЙ ИНФОРМАЦИИ



Регулярное выражение – это представленная в виде формулы алгебраическая запись множества символьных слов, в которой чередуются знаки регулярных операций и символы конечного алфавита. Регулярные выражения являются мощным средством текстового поиска. Они широко используются при работе в операционных системах UNIX и Linux для фильтрации текстовых файлов или выходных данных команд.

Базовый набор для конструирования регулярных выражений образуют три регулярных операции:

· объединение ( | );

· конкатенация;

· итерация ( *, + ).

Операция объединения обеспечивает возможность выбора одной из двух альтернатив. Она обозначается знаком | и имеет смысл логического оператора ИЛИ, обеспечивая выбор одной из двух возможных альтернатив: первая из них указывается слева от знака операции, вторая – справа.

Операция конкатенации заключается в слиянии символов шаблона в единую цепочку (последовательность литералов). В регулярных выражениях знак конкатенации как таковой отсутствует. Реализуется конкатенация путем последовательного написания объединяемых символов без пробелов и иных специальных символов.

Операция итерации обеспечивает повторение символа или слова произвольное число раз (от нуля до бесконечности).

 

Общие сведения о регулярных выражениях

Элементы регулярных выражений

В состав регулярных выражений входят два типа элементов: обычные текстовые символы (литералы) и управляющие символы (метасимволы), обозначающие регулярные операции и выполняющие служебные функции.

Существует международный стандарт POSIX который определяет базовый (BRE) и расширенный (ERE) наборы метасимволов в регулярных выражениях.

В расширенный набор метасимволов включены:

$ . ''   * [ ] ( ) ^ | \ + ?

Все прочие символы, не входящие в вышеуказанный список (например, буквы или цифры), рассматриваются в регулярных выражениях как обычные символы и интерпретируются согласно их кодам ASCII.

В особую группу символов входят символы табуляции, процента и пробела. Они не могут быть использованы в регулярных выражениях как обычные символы в виду особенности их интерпретации как знаков-разделителей.

 

Литералы и литеральные константы в регулярных выражениях

В простейшем случае регулярное выражением может состоять только из текстовых символов, например,

UNIX

Формально к буквам данного выражения применяется команда конкатенации (слияния), знак которой опущен между буквами слова. Данному регулярному выражению будет соответствовать последовательность букв U, N, I и X, расположенных в том же порядке, что и в регулярном выражении.

Наряду с литералами в регулярных выражениях могут быть использованы литеральные константы. Обычно они используются для включения в состав выражения неотображаемых символов. Например, литеральная константа \n обозначает перевод строки, а \t – горизонтальную табуляцию.

В регулярных выражениях допустимо специфицировать любой символ его кодом ASCII в системе счисления по основанию 8. Так символу пробела соответствует ASCII-код, равный 408. Таким образом, последовательность символов OS UNIX в регулярном выражении может быть представлена в виде:

OS\040UNIX

Экранирование метасимволов

На практике зачастую возникает ситуация, когда в регулярных выражениях метасимволы необходимо использовать как литералы (то есть как обычные символы), например, когда такие символы ищутся в тексте. В этом случае их необходимо «экранировать» в шаблоне при помощи обратной косой черты \ . Постановка данного символа отменяет действие следующего за нем специального символа (одного). Например, шаблон 

3\ .14

соответствует поиску последовательности символов 3.14 (в регулярных выражениях метасимвол . соответствует произвольному символу).

Экранирование также может быть использовано для включения в состав регулярного выражения символа пробела. Включение пробела в состав регулярных выражений непосредственно запрещено, так как пробел будет интерпретирован командой как окончание выражения, первая его часть будет отнесена к шаблону, а последующая (или последующие) – к аргументам команды.

Так, для поиска последовательности символов OS UNIX необходимо задать регуляроное выражение

OS\ UNIX

Если требуется экранировать группу символов, то одна должна быть заключена в двойные кавычки. Так, регулярное выражение

C ''++''

удовлетворяет поиску последовательности символов C++, в которой метасимволы + теряют свое специальное значение.

Следует отметить, что экранированы могут быть не только специальные символы, то и вся строка. Конечно, экранирование литералов не является обязательным, но допустимо. Так регулярные выражения C\ +\+, C ''++'' и ''С++'' эквивалентны.

 


Дата добавления: 2020-01-07; просмотров: 155; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!