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

Захваты в замене

Часть замены в s/// может ссылаться на захваты, сделанные шаблоном. Это позволяет перекомпоновать совпавший текст, а не просто его выбросить.

Например, превратим дату, записанную как год-месяц, в месяц/год, захватив оба числа и подставив их в обратном порядке:

my $d = '2025-06';
$d ~~ s/ (\d+) '-' (\d+) /$1\/$0/;
say $d; # 06/2025

Шаблон захватывает год в $0, а месяц в $1. В замене $1 и $0 записаны в обратном порядке, а между ними стоит косая черта. (Черта экранирована как \/, чтобы её не приняли за конец подстановки.) Заметьте, что пробелы незначимы на стороне шаблона, но буквальны на стороне замены, поэтому замена записана без пробелов вокруг.

Именованные захваты работают так же. Благодаря им подстановка читается ясно даже тогда, когда частей несколько:

my $name = 'Doe, Jane';
$name ~~ s/ $<last>=(\w+) ', ' $<first>=(\w+) /$<first> $<last>/;
say $name; # Jane Doe

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

Тест — Оператор s///   |   Транслитерация


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