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

Классы символов

Часто нужно сопоставить не один определённый символ, а любой символ из некоторого набора. Такой набор называется классом символов и записывается между <[ и ]>:

say 'grey' ~~ / gr <[ae]> y /; # 「grey」
say 'gray' ~~ / gr <[ae]> y /; # 「gray」

Класс <[ae]> соответствует одному символу — либо a, либо e, — поэтому подходят оба написания слова.

Внутри скобок можно указать диапазон через две точки:

say 'a1b2' ~~ / <[0..9]> /; # 「1」

<[0..9]> соответствует любой одной цифре; первая цифра в строке — 1.

Чтобы сопоставить любой символ, которого в наборе нет, поставьте знак минуса сразу после открывающей скобки:

say 'stop!' ~~ / <-[a..z]> /; # 「!」

Здесь <-[a..z]> соответствует первому символу, не являющемуся строчной буквой, — это восклицательный знак.

В одном классе можно объединить несколько кусочков. Например, <[a..z A..Z 0..9]> соответствует букве или цифре. Пробелы там только для удобочитаемости: как и везде в регулярном выражении, пробелы внутри <[…]> игнорируются, поэтому <[a..zA..Z0..9]> — это ровно тот же класс.

Практика

Пройдите 1 тест по содержанию этой темы.

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

Сопоставление литерального текста   |   Тест — Собственные классы


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