67. Модификаторы (adverbs) в регексах Perl 6, часть 3

Осталось рассмотреть три модификатора: :r:ov и :ex.

:r или :ratchet

Запрет на бектрекинг. Сравните две попытки:

> 123 ~~ / \d+ 3/
「123」

> 123 ~~ m:r/ \d+ 3/
False

Несмотря на то, что сам по себе регекс подходит к числу 123, во втором случае класс \d+ захватил все цифры и отказывается уступать. Более реалистичный случай использования :r вы можете встретить в конструкциях с альтернативами |.

:ov или :overlap

Разрешает поиск с пересечениями. Если в одной позиции начинается более чем одна подходящая последовательность, то выбирается самая длинная. Например, найти все строки, начинающиеся с 1 и заканчивающиеся 2:

> 12345678913234 ~~ m:ov/ 1 .* 2 /
(「123456789132」 「132」)

> 12345678913234 ~~ m:ov/ 1 .*? 2 /
(「12」 「132」)

:ex или :exhaustive

Работает как :ov, но снимает ограничения на поиск самых длинных последовательностей. То есть этот модификатор найдет все:

> 12345678913234 ~~ m:ex/ 1 .* 2 /
(「123456789132」 「12」 「132」)

> 12345678913234 ~~ m:ex/ 1 .*? 2 /
(「12」 「123456789132」 「132」)

2 thoughts on “67. Модификаторы (adverbs) в регексах Perl 6, часть 3”

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *