0

Java Garbage Collection ログを解析するプログラムを作成しようとしています。マイナー コレクションに一致する文法を作成しました。パターンを特定したら、それを個々のトークンに解析したいと思います。私の質問は、以前に定義した文法でこれを行うエレガントな方法はありますか?

public class RegexTestHarness {
  private final static String REGEX_SMALL_COLLECTION = "\\d+\\.\\d+: \\[GC \\d+.\\d+: \\[ParNew: \\d+K\\-\\>0K\\(\\d+K\\), \\d+.\\d+ secs\\] \\d+K\\-\\>\\d+K\\(\\d+K\\), \\d+.\\d+ secs\\]";

  public static void main(String[] args){
    Pattern pattern = Pattern.compile(REGEX_SMALL_COLLECTION);           
    Matcher matcher = pattern.matcher("54.770: [GC 54.770: [ParNew: 5232768K->0K(5237824K), 1.1304192 secs] 5238622K->380448K(10480704K), 1.1306410 secs]");
    while (matcher.find()) {            
      System.out.println(matcher.group(0));
      System.out.println(matcher.start());
      System.out.println(matcher.end()); 
    }
  }
}
4

1 に答える 1

1

グループを正規表現に追加する必要があります。

private final static String REGEX_SMALL_COLLECTION = "(\\d+\\.\\d+): \\[GC (\\d+.\\d+): \\[ParNew: \\d+K\\-\\>0K\\(\\d+K\\), \\d+.\\d+ secs\\] \\d+K\\-\\>\\d+K\\(\\d+K\\), \\d+.\\d+ secs\\]";

次に、グループの値にアクセスします。上記の例では、必要な最初の 2 つの項目を括弧で囲みました。これにより、一致する部分文字列を取得するよう正規表現エンジンに指示します。さらに追加する必要があります。現在行っているようMatcher.group()に、各グループを取得するために使用します。グループ 0 は常に一致全体であることに注意してください。残りは1、開始括弧の順に上から番号が付けられ(ます。

于 2012-07-26T13:33:12.997 に答える