2016-09-10 29 views
10

Ruby'deki Normal İfadeler konusunda yeniyim ve \k<name+0> ne anlama geldiği konusunda herhangi bir sağlam belge bulamadık. Almayacağım +0 parçası."+0" ifadesi ne demek regexp k <name+0>?

İşte bir örnek - bu Normal İfade palindrom eşleşir:

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

Ben artık doğru ile eşleşen +0\k<l+0> içinde kaldırılır.
Benim testler:

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

Tüm yaptığım +0 kaldırmaktır. Daha önce hiç bir belge veya örneği bulamadım, kimse bana doğru yönde işaret edebilir mi?

+0

Harika bir soru. Beni "g g <...>" nün harika dünyasına tanıttı. –

cevap

11

\k<l+0>(?<l>\w) maçı en iken adında yakalayan grubun 'l' tarafından eşleşti 'l'

\k<l+0> Maçlar aynı metin adlı yakalama grubunda saklanır (?<l>\w)

ile birlikte çalışır Bu backreference aynı yineleme seviyesi şimdi

+1

Awesome! Ayrıca, '+ 0'. + 1' veya başka bir şey var mı? –

+0

@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ +0 aynı yineleme seviyesidir, +1 bir seviye daha derine, -1 bir seviye daha az derindir – Andie2302

+1

Ne dediğinden şüphe etmiyorum, ama ben + 0' için bir başvuru bulmak istiyorum, Tercihen Ruby belgelerinde, ancak aksi halde Oniguruma dokümanlarında. –