Курс по 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///


💪 Или преминете направо към упражненията в този раздел.