Frage Was bedeutet "+0" im regulären Ausdruck \ k ?


Ich bin neu in Regular Expressions in Ruby, und ich kann anscheinend keine solide Dokumentation darüber finden \k<name+0> meint. Es ist das +0 Teil, den ich nicht bekomme.

Hier ist ein Beispiel - dieser Regexp passt zu Palindromen:

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

Wenn ich das entferne +0 im \k<l+0> es stimmt nicht mehr richtig überein.
Meine Tests:

>> /\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

Alles, was ich getan habe, ist das entfernen +0. Ich habe noch keine Dokumentation oder ein Beispiel dafür gefunden, kann mir jemand in die richtige Richtung weisen?


10
2017-09-10 09:13


Ursprung


Antworten:


Das \k<l+0> arbeitet mit der (?<l>\w)

Das Spiel von (?<l>\w) wird in der erfassten Erfassungsgruppe gespeichert 'l'

\k<l+0> Entspricht demselben Text, der von der genannten Erfassungsgruppe gefunden wurde 'l' wenn es auf der gleichen Rekursionsebene wie diese Rückreferenz jetzt ist


11
2017-09-10 09:50