候補から選択(|)

広告

いくつかの候補となる文字列を列挙し、そのいずれか一致する場合にマッチするパターンの記述方法を確認します。書式は次の通りです。

書式は次の通りです。

"候補1|候補2|.."

候補となる文字列をハイフン(|)で区切って続けて記述します。具体的な例として"Friday"、"Saturday"、"Sunday"のいずれかにマッチする正規表現は次のように記述します。

"Friday|Saturday|Sunday"

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

○ Saturday
○ Today is Friday
○ Sunday's menu
× Tuesday

このように複数の候補のいずれかに一致するパターンを定義することが簡単にできます。

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

String str = "Document created by 20090801";
String regex = "2007|2008|2009";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

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

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

他の文字列と組み合わせ

選択を使用する場合に、他の文字と組み合わせる場合を考えてみます。

"bordecolor red|blue|yerllow"

上記は"bordecolor red"、"bordecolor blue"、"bordecolor yerllow"のいずれかに一致するようなパターンを作成したつもりでしたが実際には"bordecolor red"、"blue"、"yerllow"のいずれかに一致する場合にマッチします。つまり「bordecolor red」「blue」「yerllow」という3つの候補のいずれかに一致するパターンを作成していることになります。

このように選択と他のパターンを組み合わせる場合には、どの部分が選択の候補として記述されているのかを明確にするために、選択の全体を括弧()で囲んで下さい。

"(候補1|候補2|..)"

よって先ほどの場合は次のように記述することで意図したとおりのパターンとなります。

"bordecolor (red|blue|yerllow)"

上記は"bordecolor red"、"bordecolor blue"、"bordecolor yerllow"のいずれかがターゲット文字列に含まれている場合にマッチします。

サンプルプログラム

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

JSample1_1.java

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

class JSample1_1{
  public static void main(String args[]){
    String str1 = "2009.07.01";
    String str2 = "1995年04月02日";
    String str3 = "08/04/2007";
    String str4 = "99/11/25";

    String regex1 = "2007|2008|2009";
    Pattern p1 = Pattern.compile(regex1);

    String regex2 = "200|199";
    Pattern p2 = Pattern.compile(regex2);

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

    check(p1, str1);
    check(p1, str2);
    check(p1, str3);
    check(p1, str4);

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

    check(p2, str1);
    check(p2, str2);
    check(p2, str3);
    check(p2, str4);
  }

  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 )