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

Сопоставление литерального текста

Простейший шаблон — это последовательность букв и цифр. Такой шаблон соответствует именно этим символам, идущим в этом порядке, в любом месте строки:

say 'the cat sat' ~~ /cat/; # 「cat」
say 'Hello'       ~~ /ell/; # 「ell」

Совпадение не обязано начинаться с начала строки — движок регулярных выражений ищет шаблон в каждой позиции, пока не найдёт.

Успешное сопоставление порождает объект Match. То самое 「cat」 из первого примера — это и есть вид такого объекта при печати: say показывает Match как совпавший текст, заключённый в угловые кавычки 「 」. Если шаблона в строке нет, сопоставление не удаётся: умное сопоставление даёт Nil — неопределённое значение, которое в логической проверке считается ложным:

say ('the cat sat' ~~ /dog/);       # Nil
say ('the cat sat' ~~ /dog/).Bool;  # False

Внутри регулярного выражения пробелы по умолчанию не значимы — они нужны лишь для удобочитаемости шаблона. Поэтому / ell / соответствует ровно тому же, что и /ell/; окружающие пробелы просто игнорируются:

say 'Hello' ~~ / ell /; # 「ell」

А раз пробел в шаблоне игнорируется, для сопоставления настоящего пробела нужны кавычки: всё, что вы поместите в кавычки, сопоставляется буквально. Так же поступают и со знаком препинания, который иначе имел бы в регулярном выражении особое значение:

say 'a b'       ~~ / 'a b' /; # 「a b」
say 'price: $5' ~~ / '$' /;   # 「$」

(Для пробельных символов можно также использовать класс \s, с которым вы вскоре встретитесь.)

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

Литералы и классы символов   |   Классы символов


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