Что означает "+0" в регулярном выражении \ k<name + 0>?

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам