Курс по Raku / Регулярни изрази и граматики / Регулярни изрази / Твърдения за оглед / Exercises / Между скоби

Решение: Между скоби

Ето едно възможно решение на задачата.

Код

say '$50' ~~ / <?after '$'> \d+ >> <!before '.'> /;

🦋 Намерете програмата във файла whole-dollar.raku.

Изход

「50」

Коментари

  1. <?after '$'> е положителен поглед назад — той изисква $ непосредствено преди числото, — а <!before '.'> е отрицателен поглед напред: той изисква след него да не следва .. Нито $, нито околността стават част от съвпадението, така че резултатът е само 50.

  2. >> е граница на дума, отбелязваща края на числото. Без нея лакомият \d+ би могъл да се върне назад: при $39.99 той би отстъпил 9 и би съпоставил 3 (след което . не следва). >> принуждава да се вземе цялото число, така че $3.99 и $39.99 правилно не дават съвпадение.

  3. Това е случаят, в който погледът напред си заслужава хляба: „след което не следва десетична точка“ е невъзможно да се изрази с обикновена група за прихващане, защото там няма какво да се прихване — има само условие за проверка.

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

Между скоби   |   Наречия