Рассмотрим следующий вариант ?? (я полагаю, что нет?) регулярное выражение для проверки, является ли строка палиндромом:
^((.)(?1)\2|.?)$
следующее
my regex palindrome {
^((.)(?1)\2|.?)$
}
say "$word is a palindrome"
if $word ~~ /<palindrome>/
&& $word.chars > 1;
дает ошибку
===SORRY!===
Quantifier quantifies nothing
at /home/cat/projects/perl6/code/misc/words.pl6:6
------> ^((.)(?⏏1)\2|.?)$
Unrecognized backslash sequence (did you mean $1?)
at /home/cat/projects/perl6/code/misc/words.pl6:6
------> ^((.)(?1)\2⏏|.?)$
У меня есть практические знания о регулярных выражениях (Python), и я понимаю, что это значит, когда он говорит «Quantifier ничего не дает количественной оценки», но я не понимаю, почему он говорит это, когда я просил рекурсию, не количественная оценка.
У меня недостаточно знаний о Perl, чтобы понять, почему ему не нравится обратная косая черта (другая ошибка).
Я действительно попытался повозиться с синтаксисом и поискать, но что касается меня и Интернета, это регулярное выражение работает, и возиться с ним порождает различные другие ошибки, которых я не получаю.
Что я делаю неправильно?
perl
в вопросы Perl 6, но, пожалуйста, всегда включать тегperl6
. В противном случае вы запутаете всех разработчиков Perl 5, которые будут удивляться, почему ваш код выглядит так забавно. - person ThisSuitIsBlackNot   schedule 27.01.2016^((.)(?1)\2||.?)$
- person Wiktor Stribiżew   schedule 27.01.2016(?1)
не является допустимой конструкцией в Perl 6. Регулярное выражение Perl 6 даже не является удаленным PCRE. - person hobbs   schedule 27.01.2016(?1)
- это рекурсивный подшаблон в регулярном выражении Perl 5, а не именованная группа захвата. Я не уверен, как перевести это в регулярное выражение Perl 6 (или если это можно сделать с помощью регулярного выражения), но вот Perl 6 regex docs. Имейте в виду, что подавляющее большинство вопросов Perl на SO касается Perl 5, и попытка запустить код Perl 5 с Perl 6, вероятно, не будет работать большую часть времени. - person ThisSuitIsBlackNot   schedule 27.01.2016<~~>
рекурсивно соответствует всему регулярному выражению, или вы можете указать нумерованный (<~~0>
) или именованный (<~~foo>
) подшаблон. - person Alan Moore   schedule 27.01.2016\1
, также исчезли. Ну попробуй^((.)<~~1>$2||.?)$
. Или^<(<(.)><~~1>$2||.?)>$
(Вы также можете захватить подмножество совпадений, используя конструкцию<(...)>
) - person Wiktor Stribiżew   schedule 27.01.2016~~
утверждения для групп захвата не реализованы ... - person Christoph   schedule 27.01.2016