Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Регулярные выражения Perl.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
20 Кб
Скачать
☆

6. Модификаторы

Поведение регулярных выражений можно менять с помощью модификаторов. Например, как вы уже могли заметить, соответствие строки регулярному выражению проверяется с учетом регистра символов. Изменить это поведение можно с помощью модификатора /i (case insensitivity):

# выражение

$str =~ s/[a-z]/i;

# полностью аналогично

$str =~ s/[a-zA-Z]/;

По-умолчанию производится поиск только первого совпадения регулярному выражению. Модификатор /g позволяет осуществить глобальный (global) поиск:

# выдираем из HTML-файла все, что выделено жирным

# знак вопроса - для отключения жадного разбора

my @words = $html =~ m#<strong>(.*?)</strong>#g;

# будьте осторожны при использовании /g в скалярном контексте

# подробности здесь: http://koorchik.blogspot.com/2011/07/perl-5.html

print "$_\n" for(@words);

Как было сказано выше, точка обозначает любой символ, кроме символа новой строки. Изменить такое поведение можно с помощью модификатора /s:

# выдираем из HTML-файла содержимое статьи,

# которое может содержать далеко не одну и не две строчки

my ($article) = $html =~ m#<div id="article">(.*?)</div>#s;

Кстати, если в регулярном выражении нужно обозначить «любой символ» без использования модификатора /s, используйте выражение [\d\D]. Оно означает «любой символ, являющийся цифрой, или не являющийся цифрой», то есть вообще любой символ.

Наконец, ничто не мешает использовать несколько модификаторов одновременно:

# выдираем из HTML-файла все, что выделено жирным

my @words = $html =~ m#<strong>(.*?)</strong>#gi;

# сработает для <strong>, <STRONG> или даже <StRoNg>

Дополнение: Еще один полезный модификатор — /o. Он означает «компилировать регулярное выражение только один раз». В некоторых случаяхэтот модификатор может существенно ускорить скрипт. Правда, я не уверен, что он поддерживается где-то, кроме как в Perl. За наводку спасибо товарищу@tanraya.

7. Заключение (к.О.)

Данная заметка не претендует на полноту. Однако в ней перечислены почти все возможности регулярных выражений, которыми мне когда либо приходилось пользоваться. Я специально умолчал о замене с помощью регулярных выражений (оператор s/// в Perl), модификаторе /e, работе с юникодом и, возможно, нескольких других моментах.

Заметка и так получилась раза в два больше, чем я планировал. Так что об названных вещах я напишу как-нибудь в другой раз. В качестве источника дополнительной информации я бы рекомендовал man perlrequick (быстрое введение в регулярные выражения) и man perlre (более подробное описание сабжа). Если вы заметили в этом тексте ошибку/неточность или у вас есть вопрос по регулярным выражениям, пишите в комментариях, не стесняйтесь.

Дополнение от Ивана Семенова: набор шпаргалок по регулярным выражениям. Ну и заодно от себя порекомендую эту шпаргалку.