Регулярные выражения Perl и их применение

       

Работа оператор s/// с модификатором g и без него


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

my $text='123 234 345 456'; $text =~ s/\d+/a/; print $text;

Получим строку

a 234 345 456

Еще пример:

my $text='123 234 345 456'; $text =~ s/\d+/reverse $&/ge; print $text;

Здесь получим такой результат:

321 432 543 654

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

$text =~ s/(\d+)/reverse $1/ge;

В операторах m// и s/// специальные переменные $1, $2, …, $&, $`, $' и т.д. для каждой итерации, обусловленной модификатором g, создаются заново (локализуются). В результате при замене используются нужные значение этих переменных, которые возникли при последней итерации поиска.



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