Язык программирования Perl

На нашем литературном портале можно бесплатно читать книгу Язык программирования Perl, Шохирев Михаил Васильевич-- . Жанр: Прочая компьютерная литература. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Язык программирования Perl
Название: Язык программирования Perl
Дата добавления: 16 январь 2020
Количество просмотров: 563
Читать онлайн

Язык программирования Perl читать книгу онлайн

Язык программирования Perl - читать бесплатно онлайн , автор Шохирев Михаил Васильевич

Курс знакомит с языком программирования Perl, с его принципами, основными возможностями и особенностями в объёме, достаточном, чтобы начать разрабатывать прикладные и системные задачи, включая программирование для сети Интернет.

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

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 29 30 31 32 33 34 35 36 37 ... 82 ВПЕРЕД
Перейти на страницу:

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

[x]. в переменную $` помещается часть строки до найденного соответствия;

[x]. в переменную $& помещается часть строки, соответствующая образцу;

[x]. в переменную $' помещается часть строки после найденного соответствия;

[x]. в переменную $+ помещается последнее найденное совпадение для последнего шаблона в скобках.

Если поиск окончился неудачей, то этим переменным новые значения не присваиваются. Посмотрим на примере, что сохранится в этих переменных после поиска такого соответствия:

$htm= "<A HREF='http://regexp.ru/'>Регулярные выражения</A>";

$htm =~ m|HREF=["'](S+?)["']>|; # поиск URL сайта

При успешном совпадении с шаблоном в специальные переменные будут помещены такие значения:

$` = '<A '

$& = 'HREF='http://regexp.ru/'>'

$' = 'Регулярные выражения</A>'

$+ = 'http://regexp.ru/'

Значениями этих переменных можно пользоваться при успешном сопоставлении с образцом, например:

print $& if $text =~ m/$pattern/; # выведет соответствие

В регулярном выражении можно указать, что при успешном сопоставлении строки с шаблоном найденные соответствия нужно сохранить для дальнейшей обработки. С этой целью запоминаемые части шаблона нужно заключить в круглые скобки. Это также называется захватом значений. Найденные совпадения для всех заключенных в скобки частей шаблона будут доступны через специальные переменные с именами $1, $2 и так далее. Составим регулярное выражение для поиска и сохранения в служебных переменных информации о сайте в том же тексте:

$pattern = q|HREF=["'](S+?)["']>([^<]+?)</A>|; # шаблон

$htm =~ m/$pattern/; # поиск соответствия в $htm

# в $1 = 'http://regexp.ru/'

# в $2 = 'Регулярные выражения'

Сохраненные совпадения доступны и во время обработки регулярного выражения, но через переменные с именами 1, 2 и так далее. Эти переменные называются обратными ссылками (backreference) на найденные соответствия. Так, например, можно найти два одинаковых слова, стоящих в тексте друг за другом через пробелы (возможно, по ошибке):

my $string = "Уже скоро скоро наступит весна!";

my $pattern = '(S+)s+1';

# (S+) сохранит значение 'скоро' в 1

$string =~ m/$pattern/; # соответствие: 'скоро скоро'

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

my $text = 'Начало в 12:25:00.'; # строка с данными

my $pattern = '(dd):(dd):(dd)'; # образец для поиска

my @time = $text =~ m/$pattern/; # сохраним в массиве

my ($hh, $mm, $ss) = $text =~ m/$pattern/; # и в списке

Можно находить любое количество соответствий образцу в одной операции сопоставления. Это делается с помощью модификатора глобального поиска.

До сих пор операция сопоставления прекращала работу и возвращала результат, когда находилось первое соответствие строки указанному шаблону. Если для операции сопоставления указать модификатор /g (global), то она будет искать в строке все соответствия образцу, организуя неявный цикл обработки регулярного выражения. Например, так можно найти все числа в строке с помощью одного шаблона:

my @numbers = 'Не 12.5, а 25!' =~ /(d+)/g; # глобальный поиск

# в @numbers будет (12, 5, 25)

Ранее в этой лекции уже упоминался модификатор /i, устанавливающий поиск с игнорированием разницы между заглавными и строчными буквами. Перечислим модификаторы для операции сопоставления:

[x]. /g - искать в тексте все соответствия образцу (Global);

[x]. /i - искать соответствие образцу без учета регистра букв (case-Insensitive);

[x]. /s - рассматривать текст как одну строку (Single-line);

[x]. /m - рассматривать текст как многострочный (Multi-line) с учетом n ;

[x]. /o - один раз откомпилировать регулярное выражение (Once);

[x]. /x - использовать расширенный синтаксис регулярных выражений (eXtended).

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

m/ # начало регулярного выражения

<A # начало тега: <A

[^>]+? # далее могут быть любые символы, кроме >

HREF # определение гиперссылки

s*=s* # знак =, возможно окруженный пробелами

["']? # может быть открывающая кавычка или апостроф

( # начало захвата значения

[^'" >]+? # адрес ссылки: все, кроме ',",пробела и >

) # конец захвата значения

['"]? # может быть закрывающая кавычка или апостроф

s* # за которым могут быть пробелы

> # конец тега

/igx; # конец регулярного выражения

# соответствует, например: <a id='ru' href="index.html">

Записанное в таком виде, регулярное выражение становится доступным для понимания, анализа и модификации. А поскольку регулярные выражения компилируются, то пробельные символы и комментарии не влияют на быстродействие программы.

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

1 ... 29 30 31 32 33 34 35 36 37 ... 82 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название