Квантификатор ничего не дает количественной оценки, но я никогда не просил о количественном выражении

Рассмотрим следующий вариант ?? (я полагаю, что нет?) регулярное выражение для проверки, является ли строка палиндромом:

^((.)(?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, чтобы понять, почему ему не нравится обратная косая черта (другая ошибка).

Я действительно попытался повозиться с синтаксисом и поискать, но что касается меня и Интернета, это регулярное выражение работает, и возиться с ним порождает различные другие ошибки, которых я не получаю.

Что я делаю неправильно?


person cat    schedule 26.01.2016    source источник
comment
В настоящее время идет обсуждение в Meta о том, можно ли добавить тег perl в вопросы Perl 6, но, пожалуйста, всегда включать тег perl6. В противном случае вы запутаете всех разработчиков Perl 5, которые будут удивляться, почему ваш код выглядит так забавно.   -  person ThisSuitIsBlackNot    schedule 27.01.2016
comment
@ThisSuitIsBlackNot аааааааааааааааааааааааааа, окей.   -  person cat    schedule 27.01.2016
comment
Вам нужно удвоить трубу: ^((.)(?1)\2||.?)$   -  person Wiktor Stribiżew    schedule 27.01.2016
comment
@ WiktorStribiżew такая же ошибка, без изменений.   -  person cat    schedule 27.01.2016
comment
(?1) не является допустимой конструкцией в Perl 6. Регулярное выражение Perl 6 даже не является удаленным PCRE.   -  person hobbs    schedule 27.01.2016
comment
(?1) - это рекурсивный подшаблон в регулярном выражении Perl 5, а не именованная группа захвата. Я не уверен, как перевести это в регулярное выражение Perl 6 (или если это можно сделать с помощью регулярного выражения), но вот Perl 6 regex docs. Имейте в виду, что подавляющее большинство вопросов Perl на SO касается Perl 5, и попытка запустить код Perl 5 с Perl 6, вероятно, не будет работать большую часть времени.   -  person ThisSuitIsBlackNot    schedule 27.01.2016
comment
Согласно этой странице, <~~> рекурсивно соответствует всему регулярному выражению, или вы можете указать нумерованный (<~~0>) или именованный (<~~foo>) подшаблон.   -  person Alan Moore    schedule 27.01.2016
comment
Что ж, обратные ссылки, такие как \1, также исчезли. Ну попробуй ^((.)<~~1>$2||.?)$. Или ^<(<(.)><~~1>$2||.?)>$ (Вы также можете захватить подмножество совпадений, используя конструкцию <(...)>)   -  person Wiktor Stribiżew    schedule 27.01.2016
comment
@ WiktorStribiżew: индексы групп захвата отсчитываются от 0, и ~~ утверждения для групп захвата не реализованы ...   -  person Christoph    schedule 27.01.2016


Ответы (1)


Один из способов сделать это:

my regex palindrome { (.) <~~> $0 || .? }
say "aba" ~~ /^<palindrome>$/;
person Christoph    schedule 26.01.2016
comment
это считает каждое слово палиндромом. - person cat; 27.01.2016
comment
@cat: не для меня; какая у тебя версия Ракудо? - person Christoph; 27.01.2016
comment
This is Rakudo version 2015.12-219-gd67cb03 built on MoarVM version 2015.12-29-g8079ca5 implementing Perl 6.c. Полное раскрытие: я запустил его на /usr/share/dict/words и отправил его вывод в файл, затем diff обработал файлы, и никаких различий не было. - person cat; 27.01.2016
comment
У меня все еще 2015.12-113, так что обновлюсь и посмотрю, что будет; может быть проблема в другом месте вашего кода? - person Christoph; 27.01.2016
comment
Это определенно соответствует каждой строке, и это не только мой код, потому что то же самое касается perl6 -e и REPL. - person cat; 27.01.2016
comment
Ой! Я пропустил ^ и $ в приложении регулярного выражения. Моя ошибка, ты прав. - person cat; 27.01.2016