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

Самый длинный токен и первое совпадение

Когда в одном и том же месте могли бы совпасть сразу два варианта, оператор | выбирает тот, который сопоставляет самый длинный кусок текста. Это называется сопоставлением по самому длинному токену:

say 'catdog' ~~ / cat | catdog /; # 「catdog」

Хотя cat записан первым и подошёл бы, | предпочитает более длинное catdog.

Иногда нужно обратное — перебрать варианты в том порядке, в каком вы их записали, и взять первый подошедший. Именно это делает двойная черта ||:

say 'catdog' ~~ / cat || catdog /; # 「cat」

Теперь cat пробуется первым и совпадает, поэтому движок на нём и останавливается, так и не дойдя до catdog.

Используйте | (самый длинный токен), когда вам нужно «лучшее» совпадение независимо от порядка, — это обычный выбор, и именно на нём держатся грамматики. Используйте || (первое совпадение), когда порядок вариантов осмыслен и вы хотите, чтобы побеждали более ранние.

Практика

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

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

Тест — Группировка   |   Тест — Альтернативы


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