В чем смысл <.before...>?

78
10

В Perl 6, в чем смысл <.before... > в регулярном выражении? Кажется, это означает, что <?before... >:

my $str = "Hello";
$str ~~ /<alpha> <?before 'o'>/;
say $/;
$str ~~ /<alpha> <.before 'o'>/;
say $/;

Выход:

「l」
alpha => 「l」
「l」
alpha => 「l」

Я хотел бы прояснить это, потому что увидел какой-то код, который использовал <.before...> и я не был уверен, что это значит. Это может быть незаконный синтаксис, или это может означать отрицательный внешний вид <!before...> или позитивный просмотр <?before...> или что-то еще. Я знаю, что я могу создать правило, подобное <alpha> не захватывая, поставив перед ним точку <.alpha>, но для меня это не имеет смысла, поскольку они всегда не захватываются. В любом случае он должен быть записан <.?before... > или <.!before... > чтобы отличить положительный и отрицательный образы?

спросил(а) 2021-01-25T18:28:00+03:00 4 месяца, 4 недели назад
1
Решение
125

<.before...> - это то же самое, что и <?before...>, хотя и менее очевидный <.before...> (поэтому я рекомендую использовать форму <?before...>).

В принципе, <?anything> превращает anything в позитивный взгляд вперед, а <.anything> - это не захватывающий вызов subrule. Поскольку before уже есть прогноз, и ни одна из форм не захватывает, они ведут себя одинаково.

ответил(а) 2021-01-25T18:28:00+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема