在正则表达式\k<name+0>中,“+0”代表什么意思?

10

我对Ruby中的正则表达式不熟悉,似乎找不到关于\k<name+0>的详细文档,其中我不理解的是+0部分。

以下是一个示例 - 这个正则表达式匹配回文字符串:

\A(?<p>(?:(?<l>\w)\g<p>\k<l+0>|\w))\z

当我从\k<l+0>中移除+0时,它不再正确匹配。
我的测试:

>> /\A(?<p>(?:(?<l>\w)\g<p>\k<l+0>|\w))\z/.match "aabbcdcbbaa" 
#=> #<MatchData "aabbcdcbbaa" p:"aabbcdcbbaa" l:"c">

>> /\A(?<p>(?:(?<l>\w)\g<p>\k<l>|\w))\z/.match "aabbcdcbbaa" 
#=> nil

我所做的就是删掉了+0。我还没有找到任何关于此的文档或示例,有人能指点我一下吗?


好问题。它让我认识到了\g<...>这个美妙的世界。 - Cary Swoveland
1个回答

11

\k<l+0>(?<l>\w) 结合使用

(?<l>\w) 匹配的内容被存储在名为 'l' 的捕获组中

\k<l+0> 匹配与该反向引用所在递归级别上的同一命名捕获组 'l' 匹配的文本。


1
太棒了!而且它是+0。还有其他像+1或其他的函数吗? - Aᴄʜᴇʀᴏɴғᴀɪʟ
@Cᴀʟʟᴏᴅᴀᴄɪᴛʏ +0 表示递归层数相同,+1 表示深入一层,-1 表示减少一层深度。 - Andie2302
1
我不怀疑你所说的,但我想找到关于 +0 的参考资料,最好是在 Ruby 文档中,否则就在 Oniguruma 文档中。 - Cary Swoveland
@CarySwoveland 如果你还感兴趣的话,我找到了一些相关文档,可以在这里(http://www.regular-expressions.info/subroutine.html)和这里(http://www.regular-expressions.info/refrecurse.html)查看。 - Aᴄʜᴇʀᴏɴғᴀɪʟ
Callodacity,谢谢。是的,这正是我在寻找的。我应该检查一下那个网站,因为我也用它作为其他参考目的。 - Cary Swoveland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接