aqubi+shin1

Recent site activity

java‎ > ‎

正規表現

Javaでは 以下の2つのクラスを使います。
  1. java.util.regex.Pattern
  2. java.util.regex.Matcher
例えば マッチさせたいパターンが abc から始まって、後は 数字の羅列 (ex.abc00123) であれば、正規表現は "abc[0-9]+" ってかけますよね。

Pattern pattern = Pattern.compile("abc[0-9]+");

・・・と、まず、パターンを作成します。
次に 実際に マッチしてくれるものを作成します。

Matcher macher = pattern.matcher("abc00006");

Matcher では find() メソッドを使って 次々と一致部分を探しに行きます。
コード的には以下のようにして確認できます。

public static void match(String pattern, String value) {
  Matcher macher = Pattern.compile(pattern).matcher(value);
  int count = 0;
  System.out.println("MATCHES is " + macher.matches() + "    value=" + value + ", pattern=" + pattern);
  macher.reset();
  boolean result = macher.find();
  if (result) {
    System.out.println("MATCH OK! value=" + value + ", pattern=" + pattern);
      do {
          count++;
          System.out.println(" find OK!");
          result = macher.find();
      } while (result);
  } else {
    System.out.println(" find NG!");
  }
  System.out.println();
}

このメソッドをつかって、

match("abc[0-9]+""abc00006");

とすると
MATCHES is true    value=abc00006, pattern=abc[0-9]+
find OK!
1回目 MATCH!:0 to 8
と結果が返ってきます。

match("aaa_""aaa_bbb_aaa_bbb_ccc_ddd_aaa_bbb_");

とすると
MATCHES is false    value=aaa_bbb_aaa_bbb_ccc_ddd_aaa_bbb_, pattern=aaa_
find OK!
1回目 MATCH!:0 to 4
2回目 MATCH!:8 to 12
3回目 MATCH!:24 to 28
となります。