Perl. Библиотека программиста

Поиск по шаблону

Копирование с подстановкой

Вам надоело многократно использовать две разные команды для копирования и подстановки.

Идентификация алфавитных символов

Требуется узнать, состоит ли строка только из алфавитных символов.

Поиск слов

Требуется выделить из строки отдельные слова.

Комментирование регулярных выражений

Требуется сделать ваше сложное регулярное выражение более понятным и упростить его изменение в будущем.

Поиск N-го совпадения

Требуется найти не первое, a N-e совпадение шаблона в строке. Допустим, вы хотите узнать, какое слово предшествует третьему экземпляру слова fish:
One  fish  two  fish   red  fish  blue  fish

Межстрочный поиск

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

Чтение записей с разделением по шаблону

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

Извлечение строк из определенного интервала

Требуется извлечь все строки, расположенные в определенном интервале. Интервал может быть задан двумя шаблонами (начальным и конечным) или номером первой и последней строки.
Часто встречающиеся примеры — чтение первых 10 строк файла (строки с 1 по 10) или основного текста почтового сообщения (все, что следует после пустой строки).

Локальный контекст в регулярных выражениях

Требуется преобразовать регистр в другом локальном контексте или заставить метасимвол \w совпадать с символами национальных алфавитов.
Предположим, у вас имеется полгигабайта текста на немецком языке, для которого необходимо составить предметный указатель. Вы хотите извлекать слова (с помощью \w+) и преобразовывать их в нижний регистр (с помощью lс или \L). Однако обычные версии \w и lс не находят слова немецкого языка и не изменяют регистр символов с диакритическими знаками.

Неформальный поиск

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

Поиск от последнего совпадения

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

Максимальный и минимальный поиск

Имеется шаблон с максимальным квантификатором —*,+,? или {}. Требуется перейти от максимального поиска к минимальному.
Классический пример — наивная подстановка для удаления тегов из HTML-документа. Хотя s#<TT>.*</TT>##gsi выглядит соблазнительно, в действительности будет удален весь текст от первого открывающего до последнего закрывающего тега ТТ. От строки "Even <TT>vi</TT> can edit <TT>troff</TT> effectively." остается лишь "Even effectively" — смысл полностью изменился!

Поиск повторяющихся слов

Требуется найти в документе повторяющиеся слова.

Логические AND, OR и NOT в одном шаблоне

Имеется готовая программа, которой в качестве аргумента или входных данных передается шаблон. В нее невозможно включить дополнительную логику например, параметры для управления учетом регистра при поиске, AND и NOT. Следовательно, вы должны написать один шаблон, который будет совпадать с любым из двух разных шаблонов (OR), двумя шаблонами сразу (AND) или менят смысл поиска на противоположный (NOT).
Подобная задача часто возникает при получении данных из конфигурационных файлов, Web-форм или аргументов командной строки. Пусть у вас имеет программа, в которой присутствует следующий фрагмент:
chomp($pattern = <CONFIG_FH>);
if ( $data =~ /$pattern/ ) {...}
Если вы отвечаете за содержимое CONFIG_FH, вам понадобятся средства для передачи программе поиска логических условий через один-единственный шаблон.

Проверка адресов электронной почты

Требуется построить шаблон для проверки адресов электронной почты.

Копилка регулярных выражений

Некоторые полезные регулярные выражения.




Нет комментариев.



Оставить комментарий:
Ваше Имя:
Email:
Антибот: *  
Ваш комментарий: