Expresión de grupos de equilibrio de expresiones regulares de .NET: coincidencia cuando no está equilibrada

Regulaciones de grupo equilibradas .NET haz explotar mi cabeza Tengo esta cadena que estoy tratando de hacer coincidir:

other stuff blah blah....
                    {
                        stuff stuff
                        {key:
                            stuff
                            stuff
                        }
                    } more stuff.....

Aquí está mi expresión regular:

[^{}]*                      # 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 { }

Por lo tanto, estoy tratando de igualar el equilibrio entre llaves, donde algunas de las llaves tienen una palabra opcional seguida de dos puntos. La expresión regular anterior coincide con mi cadena de ejemplo, pero si quito una llave, (es decir, "desequilibrándola"):

    other stuff blah blah....
                    {
                        stuff stuff
                        {key:
                            stuff
                            stuff

                    } more stuff.....

... todavía coincide!

¿Alguien puede decirme cómo arreglar mi expresión regular?

Respuestas a la pregunta(2)

Su respuesta a la pregunta