регулярные выражения сбалансированной группы .NET заставляет мою голову взорваться. У меня есть строка, которую я пытаюсь найти:
other stuff blah blah....
{
stuff stuff
{key:
stuff
stuff
}
} more stuff.....
Вот мое регулярное выражение:
[^{}]* # anything that isn't { }
\{ # starting with {
(?> # atomic group: throw away backtracks on exit
[^{}]+
|
\{(?:\w+:)?(?<DEPTH>) # on matching { plus optional "word:" push stack
|
\}(?<-DEPTH>) # on matching } pop stack
)*
(?(DEPTH)(?!)) # if depth unbalanced, fail match
\} # ending with }
[^{}]* # anything that isn't { }
Итак, я пытаюсь сопоставить балансировочные фигурные скобки, где у некоторых из открывающих фигурных скобок есть дополнительное слово, за которым следует двоеточие. Приведенное выше регулярное выражение соответствует моему примеру строки, но если я удаляю фигурную скобку (то есть "разбалансирую ее"):
other stuff blah blah....
{
stuff stuff
{key:
stuff
stuff
} more stuff.....
... все равно совпадает!
Может кто-нибудь сказать мне, как исправить мое регулярное выражение?