Выбрать главу

4. Регулярные выражения языка Perl. Форма записи, принятая в regexp-функциях языков Perl и Python. Выражения этого типа являются более мощными по сравнению с egrep-вариантом.

После рассмотрения основных примеров в таблице 8.2 приведена сводка стандартных шаблонов для регулярных выражений. Следует отметить, что в таблицу не включен вариант выражений-масок, поэтому запись "для всех" означает только 3 типа: базовый, расширенный/Emacs и Perl/Python[79].

Таблица 8.2. Введение в операции с регулярными выражениями

Символ-шаблон Поддерживается Соответствующая строка
\ во всех Начало escape-последовательности. Определяет, следует ли интерпретировать последующий знак как шаблон. Последующие буквы или цифры интерпретируются различными способами в зависимости от программы
. во всех Любой символ
^ во всех Начало строки
$ во всех Конец строки
[...] во всех Любой из символов, указанных в скобках
[^...] во всех Любые символы, кроме указанных в скобках
* во всех Любое количество экземпляров предыдущего элемента
? egrep/Emacs, Perl/Python Ни одного или один экземпляр предыдущего элемента
+ egrep/Emacs, Perl/Python Один или несколько экземпляров предыдущего элемента
{n} egrep, Perl/Python; как \{n\} в Emacs В точности n повторений предыдущего элемента. Не поддерживается некоторыми старыми regexp-средствами
{n,} egrep, Perl/Python; как \{n,\} в Emacs n или более повторений предыдущего элемента. Не поддерживается некоторыми старыми regexp-средствами
{m,n} egrep, Perl/Python; как \{m,n\} в Emacs Минимум m и максимум n повторений предыдущего элемента. Не поддерживается некоторыми старыми regexp-средствами
| egrep, Perl/Python; как \| в Emacs Элемент слева или справа. Обычно используется с некоторой формой группирующих разделителей
(...) Perl/Python; как \(...\) в более старых версиях Интерпретировать данный шаблон как группу (в более новых regexp-функциях, например в языках Perl и Python). Более старые средства, такие как regexp-функции в Emacs и в утилите grep требуют записи \(...\)

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

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

8.2.3. Учебный пример: Glade

Glade представляет собой средство разработки интерфейсов для библиотеки Х-инструментария[80] GTK с открытым исходным кодом. Glade позволяет разрабатывать GUI-интерфейс путем интерактивного выбора, размещения и модификации элементов управления на панели интерфейса. GUI-редактор создает XML-файл, описывающий проектируемый интерфейс. Полученный файл, в свою очередь, можно передать одному из нескольких генераторов кода, которые непосредственно создают С, С++, Python- или Perl-код для интерфейса. Сгенерированный код затем вызывает создаваемые разработчиком функции, определяющие поведение интерфейса.

вернуться

79

Стандарт POSIX для регулярных выражений вводит некоторые символьные диапазоны, такие как [[:lower:]] и [[:digit:]]. Кроме того, отдельные специфические средства используют дополнительные символы-шаблоны, не описанные здесь. Однако для интерпретации большинства регулярных выражений приведенных примеров достаточно.

вернуться

80

Для тех, кто не является Unix-программистом: инструментарий X представляет собой графическую библиотеку, которая предоставляет GUI-объекты (такие как надписи, кнопки и выпадающие меню) подключенным к ней программам. В большинстве других операционных систем с графическим интерфейсом предоставляется только один инструментарий, используемый всеми. Unix и сервер X поддерживают несколько инструментариев. Это является частью разделения политики и механизма, которое в главе 1 было названо целью проектирования X-сервера. GTK и Qt являются двумя наиболее популярными X-инструментариями с открытым исходным кодом.