文字クラスによる文字の選択

広告

文字クラスとは候補となる1つの文字を列挙し、そのいずれかに一致する場合にマッチするパターンを記述する時に使用します。

書式は次の通りです。

"[abc]"

候補となる文字を並べて記述し、全体をブラケット([])(角括弧とも言う)で囲います。選択と異なり候補は必ず1文字です。その為候補と候補の間には区切り文字などは不用です。上記は"a"、"b"、"c"のどれかが含まれる文字列にマッチします。

例として次のようなパターンを定義します。

"2000[5678]"

ターゲット文字列毎にこのパターンがマッチするかどうかを次に例として記述します。

× 2004
○ 2005
○ 2006
○ 2007
○ 2008
× 2009

なお文字クラスは選択を使って次のように記述した場合と同じです。

"2000(5|6|7|8)"

文字クラスは候補が1つの文字しか記載できませんが、その代わり区切り線を記述する必要がありません。場合に応じて使い分けて下さい。

具体的には次のように記述します。

String str = "Document created by 20090801";
String regex = "2000[5678]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

if (m.find()){
  System.out.println("マッチしました");
}else{
  System.out.println("マッチしません");
}

上記の場合はマッチしません。

サンプルプログラム

では実際に試してみます。

JSample1_1.java

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class JSample1_1{
  public static void main(String args[]){
    String str1 = "Japan Cup";
    String str2 = "japanese noodle";
    String str3 = "jp code";

    String regex = "[J|j]apan";
    Pattern p = Pattern.compile(regex);

    System.out.println("パターン : " + regex);

    check(p, str1);
    check(p, str2);
    check(p, str3);
  }

  private static void check(Pattern p, String target){
    Matcher m = p.matcher(target);

    if (m.find()){
      System.out.println("○ " + target);
    }else{
      System.out.println("× " + target);
    }
  }
}

ではコンパイルを行った上で実行してみます。

p1-1

( Written by Tatsuo Ikura )