Вход/Регистрация
Язык программирования Perl
вернуться

Шохирев Михаил Васильевич

Шрифт:

Регулярные выражения часто применяются в функциях, работающих с массивами для фильтрации нужных элементов. Например, функция grep возвратит список элементов массива, соответствующих указанному образцу:

@result = grep /$pattern/, @source; # отобрать элементы

С помощью функции map можно применить операцию замены в соответствии с регулярным выражением ко всем элементам массива, например:

@hrefs = ('http://regex.info', 'http://regexp.ru');

map s{http://}{}, @hrefs; # убрать 'http://' из ссылок

Регулярные выражения дают программисту новый взгляд на текстовые данные: вместо отдельных символов и простых подстрок он начинает мыслить обобщенными шаблонами, что помогает ему находить более простые и эффективные решения. В таблице 8.1 для справки приведены основные обозначения, применяемые для записи регулярных выражений в Perl. Дополнительные сведения о регулярных выражениях можно почерпнуть из стандартной документации по Perl и перевода уникальной книги Джеффри Фридла "Регулярные выражения".

Таблица 8.1. Основные обозначения для записи регулярных выражений

Обозначение Описание Примеры
// ограничители регулярного выражения по умолчанию /$pattern/
\ отмена специального значения следующего символа m{C:\\windows}
группировка шаблонов или сохранение значения /(\w\w\w)+/
| выбор из нескольких альтернатив /кошелек|жизнь/
[] класс символов: любой символ из перечисленных /[0-9a-fA-F]/
[^] инвертированный класс символов: любой символ, кроме перечисленных /[^0-9]/
Метасимволы
. любой символ, кроме \n (соответствует любому символу, включая \n с модификатором /s) /(.+)/
\d десятичная цифра m{Время=\d+ сек}
\D не десятичная цифра /(\D*)\d+/
\w алфавитно-цифровой знак /\s+\w+\s+/
\W не алфавитно-цифровой знак /\W\W\W/
\s пробельный символ s/\s+/ /
\S любой символ, кроме пробельного /\S+/
Утверждения
^ начало строки (соответствует началу каждой строки с модификатором /m) /^\w+/
$ конец строки (соответствует концу каждой строки с модификатором /m) /\d+$/
\b граница слова (между \w и \W или \W и \w) /stop\b/
\B любая позиция, кроме границы слова /stop\B/
\A только начало строки, даже с модификатором /m /\A[#]/
\z только конец строки, даже с модификатором /m /\w+\z/
\Z только конец строки или перед \n в конце строки, даже с модификатором /m /\w+\Z/
\G позиция в строке, равная значению функции pos
Escape-последовательности
\t \n \r \f \a \b управляющие символы: \b в классе символов выступает как символ Backspace (0x08), вне его - как граница слова /[\a\b\f\r\n\t]/
\0 \x \c \N коды символов /\033\x1F\cZ/ /\x{263a}/
\l \L \u \U \Q \E преобразующие последовательности /\Q$pattern\E/
Квантификаторы
* *? любое число повторений, включая 0 (максимальный и минимальный квантификаторы) /\s*/ /\S*?/
+ +? одно и более повторений (максимальный и минимальный квантификаторы) /\d+/ /\D+?/
? ?? ноль или одно повторение (максимальный и минимальный квантификаторы) /.?/ /[.a-z]??/
{n} {n}? ровно n повторений (максимальный и минимальный квантификаторы) /\w{8}/ /\w{5}?/
{n,} {n,}? n и более повторений (максимальный и минимальный квантификаторы) /\d{2,}/ /\d{5,}?/
{n,m} {n,m}? от n до m повторений включительно (максимальный и минимальный квантификаторы) /[A-Z]{1,12}/ /[a-z]{0,3}?/

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

Лекция 9. Средства ввода-вывода

В этой лекции разбирается организация ввода-вывода данных в Perl. Рассмотрены средства работы с каталогами, файлами и содержимым файлов. Материалы этой лекции позволят вам писать полноценные программы, "общающиеся с внешним миром".

Цель лекции: познакомиться с возможностями подсистемы ввода-вывода в Perl и освоить основные приемы чтения и записи внешних данных, а также научиться работать со средствами манипулирования файлами и каталогами.

Система ввода-вывода Perl основана на принципах, заложенных в системе Unix и распространившихся на все современные операционные системы. Одним из основных понятий работы в программе с внешними данными являются потоки ввода-вывода. В программе обращение к потоку ввода-вывода производится через файловый манипулятор (file handle), иногда неправильно называемый дескриптором файла. При запуске любой программы автоматически открывается три потока: стандартный ввод (stdin), стандартный вывод (stdout) и стандартный протокол (stderr). Поток стандартного ввода в диалоговой операционной среде связывается с клавиатурной, а потоки стандартного вывода и стандартного протокола - с дисплейной частью консоли операционной системы. Со стандартными потоками в Perl связываются три предопределенных файловых манипулятора: соответственно STDIN, STDOUT и STDERR. Связывание имени файла с пользовательским файловым манипулятором в программе выполняется с помощью операции open, открывающей поток обмена данными с указанным файлом. Требования надежности рекомендуют обязательно проверять все операции ввода-вывода на успешное завершение. Поэтому в случае возникновения ошибки при открытии файла программа обычно аварийно завершается с помощью функции die, которая может выводить диагностическое сообщение в стандартный поток протокола. Например, так открывается файл и создается файловый манипулятор FILE_HANDLE:

# открыть для чтения файл по имени, взятом из $file_name

open(FILE_HANDLE, $file_name)

# или аварийно завершить программу с выдачей сообщения

or die("Ошибка открытия файла $file_name: $!\n"); #

В случае успешного открытия файла функция open помещает в свой первый аргумент готовый к использованию файловый манипулятор. Имя файлового манипулятора записывается без разыменовывающего префикса и по традиции выделяется заглавными буквами. Рекомендуется при открытии файла сохранять файловый манипулятор в скалярной переменной, что позволяет локализовать файловый манипулятор для использования только в текущем блоке или подпрограмме. Кроме того, скалярную переменную с файловым манипулятором можно удобно передавать в подпрограммы для выполнения в них операций ввода-вывода. Итак, вот предпочтительный способ открытия файла:

open my $file_handle, $file_name

or die "Ошибка открытия файла $file_name: $!\n";

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

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

Таблица 9.1. Основные режимы открытия потоков ввода-вывода

Обозначение Режим открытия Пример использования
< Чтение (существующего файла с начала) open($fh, '</temp/buffer.txt')
> Перезапись (с начала файла) open($fh, '>/temp/buffer.txt')
>> Дозапись (в конец файла) open($fh, '>>/temp/buffer.txt')
+< Чтение и запись (файл должен существовать) open($fh, '+</temp/buffer.txt')
+> Запись и чтение (файл усекается) open($fh, '+>/temp/buffer.txt')
+>> Дозапись и чтение open($fh, '+>>/temp/buffer.txt')
  • Читать дальше
  • 1
  • ...
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: