Я почти уверен, что проблема в этой строке:
(?<b-c>)*
Из того, что я могу сказать, без текста для сравнения, Regex отказывается сопоставлять его более одного раза.Я уменьшил регулярное выражение до следующего:
(1(?<a>))*
(?(a)(?<-a>))*
(?(a)(?!))
, который проходит на 1
, но не на 111
.Также попробовал (?<-a>)*
.Нет разницы.Однако, изменение его на
(1(?<a>))*
(?(a)((?<-a>)(2(?<b>))(?<-b>)))*
(?(a)(?!))
проходит как 12
, так и 111222
.Таким образом, переход от совпадения ""
к совпадению с чем-либо приводит к тому, что регулярное выражение работает должным образом.
Возвращаясь к исходному регулярному выражению, я предполагаю, что (?<b-c>)*
соответствует только 0-1 разу,это объясняет, почему работает один 2 в вашей строке, но иметь более одного не удается.
Использование строки 11
также не работает, что соответствует той же логике, что и полное совпадение ""
,что, скорее всего, означает, что он совпадает только один раз, что приводит к сбою (?(a)(?!))
.