Курс языка программирования 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 тест по содержанию этой темы.

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

Тест — Умное сопоставление   |   Тест — Сопоставление


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