ГЛАВА 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!