Курс языка программирования Raku / Регулярные выражения и грамматики / Регулярные выражения / Подстановка и замена

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

Оператор подстановки — это s///. Он выглядит как сопоставление с дополнительной ячейкой: шаблон записывается между первыми двумя косыми чертами, а текст замены — между последними двумя:

my $s = 'hello world';
$s ~~ s/world/Raku/;
say $s; # hello Raku

Подстановка изменяет переменную на месте, поэтому обновляется сама $s. Текст в части замены берётся буквально — в кавычки его заключать не надо.

Как и сопоставление, подстановка по умолчанию затрагивает только первое вхождение. Добавьте наречие :g, чтобы заменить каждое:

my $s = 'a-b-c';
$s ~~ s:g/'-'/_/;
say $s; # a_b_c

Если вы хотите сохранить оригинал и получить изменённую копию вместо правки на месте, используйте оператор с заглавной буквы — S///: он выполняет подстановку и возвращает изменённую строку, оставляя исходную нетронутой. Поскольку он не обновляет переменную на месте, направляйте его на неё через given, а не через ~~:

my $orig = 'color';
say S:g/o/0/ given $orig; # c0l0r
say $orig;                # color

(Запись $orig ~~ S/// выдаст предупреждение с советом использовать given — ведь у S/// нет ничего, что можно было бы изменить на месте.)

То же неразрушающее поведение доступно и в виде метода .subst, который возвращает новую строку:

my $orig = 'color';
say $orig.subst('o', '0', :g); # c0l0r
say $orig;                     # color

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Подстановка и замена   |   Тест — Оператор s///


💪 Или перейдите сразу к упражнениям этого раздела.