0

こんにちは、Catch-Block のテスト コンテンツを切り替えて本番コンテンツに置き換えるのに役立つアプリを作成しようとしています。私は自分のファイルを読んで内容を解析することができますが、try-catch ブロックを識別するための正規表現の作成に問題があります (私はまだこれに慣れていません)。キャッチブロック。この問題を解決するのを手伝ってくれる人はいますか??

これまでのところ、以下の式があります(まったく機能しません)

try{*}catch(*){*)

前もって感謝します。

4

3 に答える 3

3

これを行う正規表現を作成することはできません。これは、入れ子になったパターンの照合に正規表現を使用できないためです。つまり、コード内で閉じ中かっこが発生したときと、他のネストされた中かっこが発生したときを識別できません。これを達成するには、リンクされた回答が示唆するように、ANTLR などのパーサー ジェネレーターが必要になります。

于 2013-02-23T03:55:48.647 に答える
1

開発中のMicrosoftのRoslynコンパイラを見てみることをお勧めします。APIは、おそらくあなたがやろうとしていることを何でも達成できるはずです。現在プレビュー中です。

于 2013-02-23T07:31:07.753 に答える
0

これにより、解決策が得られると思います。

try\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}\s*catch\s*\([^()]*(\([^()]*\))*\)\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}

try\s*try の後に 0 個以上のスペースが続くものに一致します。

\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}{ブロック (その後に { と } を除く 0 個以上の文字が続き、その後に任意の数の文字が前後にある 0 個以上のブロックが続く) に一致します。

\s*catch\s*\([^()]*(\([^()]*\))*\)の前後にある 0 個以上のスペースcatch、次に括弧内の何かに一致します()

\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}try ブロックに似ている

注:{ s または}sを含むコメントの場合、失敗する可能性があります

于 2013-02-23T11:13:56.453 に答える