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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s