Опубликован: 14.12.2004 | Уровень: для всех | Доступ: платный | ВУЗ: Компания ALT Linux
Лекция 14:

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

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Аннотация: Регулярные выражения, их назначение и применение. Базовое и расширенное регулярное выражение. Утилиты, использующие регулярное выражение. Потоковый текстовый редактор sed.
Ключевые слова: human readable, Unix, текстовый формат данных, style, терминал, файл, строка, слово, символ конца строки, терминальная линия, ПО, поток, разделитель, shell, разбиение, сочетания, синтаксис, семантика, поиск, регулярное выражение, regular expression, специальный символ, Формальной грамматикой, анализ, regexp, подстрока, атомарное регулярное выражение, спецсимвол, множество, диапазон, составное регулярное выражение, натуральное число, операция группирования, повторитель, выражение, интервал, минимум, максимум, базовое регулярное выражение, расширенное регулярное выражение, именованное множество, пробел, CBA, позиционный оператор, параграф, syntax, word, класс, контекст, значение, правило "левый-длинный" (leftmost longest), leftmost longest, жадное регулярное выражение, нежадное регулярное выражение, однозначность результата, стандартный вывод, шаблон, утилита, параметр, ключ, CASE, команда, apropos, сценарий, полное имя, входное имя, MAX, поле, препроцессор, архив, backspace, POSIX, алфавит, программа, GNU, alt, perl, python, VIM, стиль регулярного выражения, операции, алгоритм, текстовый редактор, пользователь, операторы, on-the-fly, new, группа, место, входной, контекстный адрес, остаток, Дополнение, предпросмотр, lookahead, вывод, временный файл, editing, целый, AWK, язык программирования, Lisp

Текст

Одним из следствий У (точнее, правила human readable) в UNIX стало то, что все без исключения настройки системы и дополнительных служб, а также подавляющее большинство системных журналов и прочих хранилищ системной информации имеют текстовый формат. Это настолько бросается в глаза, что, наряду с интерфейсом командной строки, входит в понятие unix style. Даже если некоторые данные не содержатся в текстовом виде явно, всегда есть утилиты, выдающие их пользователю на терминал как текст.

Формально текстовый файл - это файл, разбитый на строки и слова, содержащий только печатные символы и символы конца строки. Таковы, как сказано в лекции 8, требования терминальной линии к передаваемой по ней информации: во-первых, некоторые символы (ascii-код которых меньше 32) считаются управляющими, во-вторых, поток байтов делится на строки при помощи символа конца строки (специальное обозначение - " \n ", ascii-код 12), в обработанном режиме именно строками система обменивается с пользователем, в-третьих, строка делится на слова с помощью символов- разделителей - пробелов и табуляций. По таким же правилам shell обрабатывает командную строку, однако разбиение на слова слегка усложняется из-за закавычивания. В языках программирования могут быть еще более сложные правила разбиения строк на слова: например, могут различаться идентификаторы, ключевые слова и знаки операций; разделитель между словами разного типа может быть необязательным и т. д.

Вообще, каждый тип текстового файла имеет свои представления о лексике (правилах построения слов ), синтаксисе (правилах сочетания слов ), семантике (правилах интерпретации текста). Представления эти, будучи формализованными, называются языком и задаются прикладной областью, а реализуются программой, которая будет разбирать содержимое файла. Неформальное требование к текстовому файлу - чтобы он был понятен, или, согласно И, потенциально понятен человеку. Для этого все слова, встречающиеся в файле, должны обозначать объекты, действия или отношения в прикладной области, а лексика, синтаксис и семантика образующегося языка должны быть понятны человеку. Собрав воедино все тексты, задающие решение пользовательской задачи и все нетекстовые исходные данные, мы получим главный элемент проективной системы - проект. Так, проект программного продукта - это исходные тексты программы на языке программирования и, возможно, данные, не влияющие на работу программы, - картинки, звуки и т. п.

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

Обработка текста

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

С задачей поиска помогает справиться мощный механизм представления структуры текста, называемый регулярным выражением (regular expression). Регулярное выражение - это строка, содержащая специальные символы, интерпретация которых такова, что одному регулярному выражению может соответствовать целый класс строк определенной структуры. С точки зрения области применения регулярное выражение напоминает шаблон, используемый в shell, однако возможностей у него намного больше. Термин "регулярное выражение" восходит к теории формальных языков и классификации формальных грамматик по Хомскому. Более чем подробный рассказ об этой теории, а также о методах синтаксического анализа см. в [ 24 ] .

Лексический анализ большинства языков в UNIX и большая часть синтаксического анализа делается именно на основе регулярных выражений. Поэтому инструмент анализа и преобразования текста, работающий с регулярными выражениями, во многих случаях может разобраться с упрощенным для решения частной задачи синтаксисом языка. Стоит заметить, что большинство языков UNIX различают строчные и прописные буквы, поэтому в регулярном выражении они также не смешиваются.

Про регулярные выражения написано несколько приличных руководств (re_format(7) или regex(7), regexp(3), grep(1)) и книг (настоятельно рекомендуем [ 26 ] ), так что все сказанное нами далее - попытка прояснить идею и очертить возможности регулярного выражения. В поисках более глубоких знаний рекомендуем обращаться к этим руководствам и в особенности к книге.

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Max Akt
Max Akt

Я прохожу курс "Операционная система Unix" и после тестов, вижу в отчете, что этот тест сдало еще 25 человек. Почему так мало, это ведь реально хороший и полезный урок. Здесь естьи теория и практичесские материалы. Сам курс написан хорошо, живым языком. И здесь я получил ответы на вопросы по Linux, которые боялся спросить. Наверное это из-за того, что в названии курса написано не Linux, а Unix и это многих отпугивает.

Andranik Avakian
Andranik Avakian

41. УК РФ и Комментарии (ст. 273)

М. 2000 г. Издательство: ALT Linux, Институт Логики

Уголовный Кодекс РФ и комментарии к нему?

По ссылке открывается сайт документации Linux, раздел Linux Installation and Getting Started

Светлана Мишланова
Светлана Мишланова
Россия, Волгоград
Илдар Аллаяров
Илдар Аллаяров
Россия