2016-09-10 16 views
10

Я новичок в регулярных выражениях в Ruby, и я не могу найти твердую документацию о том, что означает \k<name+0>. Это часть +0, которую я не получаю.Что означает «+0» в regexp k <name+0>?

Вот пример - это Regexp соответствует палиндромов:

\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. Я еще не нашел никакой документации или примера этого, может ли кто-нибудь указать мне в правильном направлении?

+0

Большой вопрос. Он познакомил меня с прекрасным миром '\ g <...>'. –

ответ

11

\k<l+0> работает вместе с (?<l>\w)

Матч (?<l>\w) хранится в захваченной группе под названием 'l'

\k<l+0> Похожее тот же текст, который был подобран по имени захватывая группы 'l', когда он был на тот же уровень рекурсии, что и этот backreference

+1

Удивительный! Кроме того, это '+ 0'. Существуют ли какие-либо другие функции, такие как '+ 1' или что-то еще? –

+0

@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ +0 - это тот же уровень рекурсии, +1 на один уровень глубже, -1 на один уровень менее глубокий – Andie2302

+1

Я не сомневаюсь, что вы говорите, но я бы хотел найти ссылку для '+ 0', предпочтительно в документах Ruby, но в документах Oniguruma в противном случае. –