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

Применение регулярных выражений


Регулярные выражения применяются во многих конструкциях. В функции split() первым параметром может использоваться регулярное выражение, которое будет служить для поиска разделителей при разделении строки на части. Так, например, можно разбить строку на подстроки по любому из пробельных символов:

@substrings = split /\s+/, $text; # разбить на части

Регулярные выражения часто применяются в функциях, работающих с массивами для фильтрации нужных элементов. Например, функция 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, регулярные выражения станут вашим привычным и надежным инструментом. И тогда задачи, при другом подходе требующие много времени и больших усилий, с помощью регулярных выражений будут решаться быстро, элегантно и эффективно.


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

© 2003-2007 INTUIT.ru. Все права защищены.

Содержание раздела