一般的な正規表現では、ネストを適切に処理する方法はありません。したがって、このような質問が出てきたときのすべての勝利 - 正規表現を使用して XML/HTML を解析しないでください。
ただし、いくつかの単純なケースでは、それが有利な場合があります。あなたの例のように、ネストのレベル数が限られている場合は、レベルごとに 1 つの正規表現を簡単に追加できます。
それでは、これを段階的に実行しましょう。最初のネストされていない属性を処理するには、使用できます
{[^}]*}
これは、開始中括弧の後に右中括弧以外の任意の数が続き、最後に右中括弧が続くものと一致します。簡単にするために、次のように、その中心を非キャプチャグループに入れます
{(?:[^}])*}
これは、代替のものを挿入するときに必要になるためです。
閉じ中かっこ( [^}]
) 以外のものを別のネストされた中かっこのレベルにすることを許可し、次のように最初の正規表現と単純に結合する場合
{(?:{[^}]*}|[^}])*}
^^^^^^^ original regex inserted as alternative (to it self)
1 レベルのネスティングが可能です。同じことをもう一度行い、この正規表現をそれ自体の代替として結合します。
{(?:{(?:{[^}]*}|[^}])*}|{[^}]*}|[^}])*}
^^^^^^^^^^^^^^^ previous level repeated
別のレベルのネストが可能になります。必要に応じて、これをさらに多くのレベルで繰り返すことができます。
ただし、これは属性名などのキャプチャを処理しません。なぜなら、あなたの質問はあなたがそこに何を求めているのかはっきりしていないからです。正規表現でネスト。
ここで regex101 で例を処理することがわかります。
よろしく