Курс Raku / Регулярні вирази та граматики / Регулярні вирази / Зіставлення рядків

Об’єкт збігу

Коли регекс збігається, розумне зіставлення повертає об’єкт збігу. Той самий об’єкт автоматично зберігається й у спеціальній змінній $/, яку іноді називають «змінною збігу».

Об’єкт збігу є чимось значно більшим за відповідь «так чи ні». Як рядок він є тим текстом, що збігся, — його дістають методом .Str або префіксом ~, який є оператором зведення до рядка й робить точно те саме:

my $m = 'concatenate' ~~ /cat/;
say $m.Str; # cat
say ~$m;    # cat

Він також знає, де в рядку знайдено збіг. Метод .from дає позицію, з якої той починається, а .to — позицію одразу після його кінця:

my $m = 'room 7 left' ~~ /\d/;
say $m.Str;  # 7
say $m.from; # 5
say $m.to;   # 6

Позиції рахуються від нуля, тож цифра 7 стоїть за індексом 5.

Коли регекс не збігається, результатом є взагалі не об’єкт збігу, а особливе значення Nil. Присвоєння Nil скаляру лишає його невизначеним:

my $m = 'abc' ~~ /z/;
say $m.defined; # False

Тож перед читанням тексту збігу завжди можна перевірити .defined (або просто використати значення в булевому контексті).

Практика

Виконайте 1 тест за змістом цієї теми.

Навігація курсом

Тест — Розумне зіставлення   |   Тест — Зіставлення


💪 Або перейдіть одразу до вправ цього розділу.