候補の中に他のメタ文字を記述

広告

選択の中に記述する候補には"(Yes|No)"などのように単なる文字列だけではなく、他のメタ文字を記述することも可能です。

具体的な例で考えてみます。

"(a.+¥[|b.+¥[)"

上記は2つの候補が記述された選択です。1つ目の候補は"a.+¥["、2つ目の候補は"b.+¥["です。"["は正規表現では特別な意味を持つためエスケープ処理して"¥["と記述しています。

"a.+["は"a"で始まり、任意の文字が1文字以上続いた後に"["が出現する文字列にマッチします。 "b.+["は"b"で始まり、任意の文字が1文字以上続いた後に"["が出現する文字列にマッチします。そしてパターン全体としてはこの候補のいずれかが出現する文字列にマッチすることになります。

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

○ abc[10]
○ border[9]
× array
× coin[7]

このように候補も単なる文字列だけではなく他のメタ文字などを組み合わせて記述することが可能です。

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

String str = "array[10].";
String regex = "(a.+¥¥[|b.+¥¥[)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

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

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

サンプルプログラム

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

JSample3_1.java

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

class JSample3_1{
  public static void main(String args[]){
    String str1 = "abc[10]";
    String str2 = "border[9]";
    String str3 = "array";
    String str4 = "coin[7]";

    String regex = "(a.+¥¥[|b.+¥¥[)";
    Pattern p = Pattern.compile(regex);

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

    check(p, str1);
    check(p, str2);
    check(p, str3);
    check(p, 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);
    }
  }
}

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

p3-1

( Written by Tatsuo Ikura )