Замена с использованием оператора s///

Если оператор поиска m// напоминает функцию поиска в текстовом редакторе, то оператор замены Perl s/// может рассматриваться как аналог функции поиска с заменой. Оператор просто заменяет часть значения переменной1, которая совпала с шаблоном, заданной строкой:

$_ = "He's out bowling with Barney tonight.";
s/Barney/Fred/; # Заменить Barney на Fred
print "$_\n";

Если совпадение не найдено, ничего не происходит и содержимое переменной остается без изменений:

# Продолжение; $_ содержит "He's out bowling with Fred tonight."
s/Wilma/Betty/; # Заменить Wilma на Betty (не получится)

Конечно, и шаблон, и замена могут быть более сложными. В данном примере строка замены использует первую нумерованную переменную $1, которая задается при поиске совпадения:

s/with (\w+)/against $1's team/;
print "$_\n"; # Содержит "He's out bowling against Fred's team tonight."

Еще несколько примеров замены (конечно, это всего лишь примеры – в реальных программах выполнение такого количества несвязанных замен подряд нехарактерно):

$_ = "green scaly dinosaur";
s/(\w+) (\w+)/$2, $1/; # "scaly, green dinosaur"
s/^/huge, /; # "huge, scaly, green dinosaur"
s/,.*een//; # Пустая замена: "huge dinosaur"
s/green/red/; # Неудачный поиск: все еще "huge dinosaur"
s/\w+$/($`!)$&/; # "huge (huge !)dinosaur"
s/\s+(!\W+)/$1 /; # "huge (huge!) dinosaur"
s/huge/gigantic/; # "gigantic (huge!) dinosaur"

Оператор s/// возвращает полезный логический признак; если замена была выполнена успешно, возвращается true, а в случае неудачи возвращается false:

$_ = "fred flintstone";
if (s/fred/wilma/) {
print "Successfully replaced fred with wilma!\n";
}.



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
m// в списочном контексте
Глобальная замена (/g)
Другие возможности регулярных выражений
Другие ограничители
Минимальные квантификаторы