考虑以下Perl风格的正则表达式(我想不是吧?)用于测试字符串是否为回文:
^((.)(?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)正则表达式的工作原理,知道“量词未能量化”表示什么,但我不明白为什么它会在我要求递归而非量化的情况下出现这种情况。
我对Perl的知识不足以知道为什么它不喜欢反斜杠(另一种错误)。
我尝试改变语法并搜索相关信息,但据我所知,这个正则表达式是有效的。当我尝试改动时,出现了其他各种我无法理解的错误。
请问我哪里做错了?
(?1)
不是 Perl 6 中的有效语法结构。Perl 6 正则表达式与 PCRE 完全不同。 - hobbs(?1)
是Perl 5正则表达式中的递归子模式,而不是命名捕获组。我不确定如何将其转换为Perl 6正则表达式(或者是否可以使用正则表达式完成),但这里有Perl 6正则表达式文档。请注意,绝大多数关于Perl的问题都是关于Perl 5的,并且尝试在Perl 6中运行Perl 5代码通常不会成功。 - ThisSuitIsBlackNot<~~>
可以递归地匹配整个正则表达式,或者您可以指定一个编号(<~~0>
)或命名(<~~foo>
)的子模式。 - Alan Moore~~
断言尚未实现... - Christoph