Осталось рассмотреть три модификатора: :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」)
Кина не будет?
Все будет