少なくとも、ネストされたケースの有限レベルを取得できます。
ネストされていない場合、式の末尾を変更します。
catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^}](?!\blog\b))*\}
^^^^^^^^^^^^^^^^^^^^^^
これを分解しましょう。
}
非文字を厳密に検討しています。したがって[^}]
。最初の が見つかったら、完了}
です。
- これは、否定先読みアサーション
(?!foo)
と呼ばれます。「この点の後には が続かない」という意味です。foo
- は
\b
単語境界です。s で囲むことlog
で、\b
"clog" や "logical" などの "誤検知" を検出しないようにします。「ログ」という唯一の単語が必要です。
- は
(?:foo)
、キャプチャせずに式をグループ化する方法です。これは重要ではありません(foo)
。その目的は、グループ全体を によって定量化できるようにすること*
です。
- すべてをまとめると、文字ごとにチェックしており、それぞれが aではなく、それぞれの後に単語全体が続いていません。
}
log
これにより、単語log
がネストされていない catch ブロック内のどこにもないことが保証されます。
次に、ネストされたケースに移ります。@TimPietzcker が指摘したように、PowerGREP はまだ再帰式をサポートしていませんが、目的のためには、有限数のネストに満足するかもしれません。1レベルのネストの式を次に示します。
catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^{}](?!\blog\b)|\{(?:[^}](?!\blog\b))*\})*\}
^ ^========================
{
そのキャラクターを嫌いなキャラクターのクラスに追加しました。これは、この文字に遭遇した場合、代替 ( ) を介し|
てネストされたケースに切り替えたいためです。これは、記号の下線が引かれた部分を比較するとわかるよう=
に、元の「内部」式の正確なコピーです。この方法で好きなだけネストを続けて、任意の数のバランスの取れたネストをキャプチャできます。
これは、10 レベルのネスティングのテンプレートです。これは、この種のほとんどのアプリケーションに十分なはずです。
catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED|\{(?:SEED)*\})*\})*\})*\})*\})*\})*\})*\})*\})*\})*\}
SEED
再帰シードはどこにありますか[^{}](?!\blog\b)
。必要に応じて再帰を削除または追加することが視覚的に簡単になるように、このように記述しました。展開すると、上記は次のようになります。
catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b)|\{(?:[^{}](?!\blog\b))*\})*\})*\})*\})*\})*\})*\})*\})*\})*\})*\}