2

最近、特定の単語を含むすべての catch ステートメントを除外するこのスタックオーバーフローの質問を見ました。

正規表現はログなしでキャッチブロックを見つけます

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^}](?!\blog\b))*\}

逆にどうしますか?

否定的なルックアラウンド部分を肯定的なルックアラウンドに切り替えようとしましたが、空の例外を取得するだけです。

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?:[^}](?=\blog\b))*\}

例:

catch (Exception e) 
{
    log.debug("word");
            //stuff
}

「log.debug」のすべてのインスタンスを見つけたい

4

1 に答える 1

2

次のように肯定的な先読みを使用できます。

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?=[^\}]*\blog\b)[^\}]+\}

(?=[^\}]*\blog\b)logこれは、その catch ブロックに何かがあるかどうかをチェックし、単語がある場合にのみ一致しますlog

を見つけたい場合はlog.debug、正規表現を次のように編集するだけです。

catch\s*\(\s*\w*\s+\w*\s*\)\s*\{(?=[^\}]*\blog\.debug\b)[^\}]+\}
于 2013-10-04T20:57:55.477 に答える