10

我是 Ruby 中正则表达式的新手,我似乎找不到任何可靠的文档来说明什么\k<name+0>意思。这是+0我没有得到的部分。

这是一个例子——这个正则表达式匹配回文:

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

当我删除它时+0\k<l+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. 我还没有找到任何文档或示例,有人能指出我正确的方向吗?

4

1 回答 1

11

\k<l+0>作品与(?<l>\w)

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

\k<l+0>匹配与命名捕获组匹配的相同文本,'l'当它处于与此反向引用相同的递归级别时

于 2016-09-10T09:50:45.500 回答