【问题标题】:What does the "+0" mean in the regexp \k<name+0>?正则表达式 \k<name+0> 中的“+0”是什么意思?
【发布时间】:2016-09-10 09:13:53
【问题描述】:

我是 Ruby 中正则表达式的新手,我似乎找不到任何关于 \k&lt;name+0&gt; 含义的可靠文档。这是我没有得到的+0 部分。

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

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

当我删除 \k&lt;l+0&gt; 中的 +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&lt;...&gt; 的奇妙世界。

标签: ruby regex backreference named-captures


【解决方案1】:

\k&lt;l+0&gt;(?&lt;l&gt;\w) 一起使用

(?&lt;l&gt;\w)的匹配存储在名为'l'的捕获组中

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

【讨论】:

  • 太棒了!另外,它是+0。还有像+1这样的其他功能吗?
  • @Cᴀʟʟᴏᴅᴀᴄɪᴛʏ +0 是相同的递归级别,+1 是深一级,-1 是低一级
  • 我不怀疑你所说的,但我想找到+0 的参考,最好是在 Ruby 文档中,否则在 Oniguruma 文档中。
  • Callodacity,谢谢。是的,这就是我要找的。当我将它用于其他参考目的时,我应该检查该网站。
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2016-02-08
  • 2011-06-15
  • 2020-11-30
  • 2012-06-10
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多