2011-11-09 10 views
0

が含まれていません{}で含まれる行数を見つけ、私はスタックトレースを出力しないすべてのcatchステートメントを見つける必要があるので、ライン;このような..</p> <p>を私たちのコードベースのために特定の文字列

catch (Exception e) { } 

又は

catch (Exception e) { 
    Do Something 
} 

又は

catch (Exception e) { 

} 

列 "のStackTraceは、" 私はこの

き{}

間のどこかに含まれている場合を含むものではないが

catch\b\s*\(.*\)\s*\{.*\n*(?!stackTrace).*\n*\} 

複数の行を除いてほとんど動作しているようです。

誰でも手助けできますか?

おかげ

EDIT:障害のいくつかの例。。それは、この上で失敗する傾向があります。それはここでは、この

} catch (JSONException e) { 
     } 
+0

を "EmptyCatchBlock" のために定義されたルールを持っているどのような言語の構文解析を行うためのスクリプトがありますか? – corsiKa

+0

スキャンしている言語がJavaであるように見えますが、スキャンは何をしていますか?いくつかの成功/失敗の例は、お使いのプラットフォームとregexオプションに応じてnice – Borodin

+0

になります。 \ nと一致しない可能性があります。だから、あなたは\ n *、その後に "stackTrace"、テキストの後ろに\ n *が続くテキストを探しているようです。私はテキスト部分も\ nを含めることを意味すると思います。だから、私にはあなたが "{[。\ n] *(?! stackTrace)[。\ n] *}のようなものを言う必要があるように思えます。 –

答えて

0

私は正規表現を使用します各catch(...)を見つけるために、ラインごとに下向きにスキャンし、カッコ内の最後までカッコを開いて閉じます。正規表現を使って "StatckTrace"をチェックするスキャンの各行。

+0

これは私がやったことです –

1

のために働く

} catch (NameNotFoundException e) { 

    } 

はあなたのための私の正規表現である(ビット醜い! - それは、任意の改善は歓迎作品)

catch\s*\([^)]*\)[^{]*\{[^}]*StackTrace[^}]*\} 
+2

キャッチブロック内に中括弧*がある場合はどうなりますか? – NullUserException

+0

それでは、正規表現を使用して問題が発生しますが、正規表現を使用して中括弧(またはそれに関係するもの)を調整することはできません。表現力には基本的なものです。だから、もしこれを分析したいなら、文脈自由文法のようなもっと強いものが必要です。 –

+0

@NullUserExceptionఠ_ఠ:Wonderが要求した問題の正規表現を作成しました。あなたは正しいです。{}内の追加の括弧では機能しません。 – Fischermaen

関連する問題