位置の指定を組み合わせて使用

広告

パターンにはメタ文字は単独で使用するだけではなく複数のメタ文字を併用して記述することが出来ます。そこで行の先頭にマッチする"^"と行の末尾にマッチする"$"を合わせて使ってみます。

"^パターン$"

具体的な例で考えてみます。"abc"と"abcdef"と言う2つの文字列に対してパターンを"^abc$"と指定した場合、このパターンは行の先頭から始まり"abc"と続き、最後に行の末尾が続くという意味になりますので、"abc"にだけマッチすることになります。

abc
× abcdef

このように1つのパターンの中に複数のメタ文字を組み合わせて使用することが可能です。

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

String str = "Hello";
String regex = "^Hello$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

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

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

サンプルプログラム

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

JSample6_1.java

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

class JSample6_1{
  public static void main(String args[]){
    String str1 = "Hello";
    String str2 = "Hello.";
    String str3 = "Hey?";

    String regex1 = "^Hel";
    Pattern p1 = Pattern.compile(regex1);

    String regex2 = "^Hello$";
    Pattern p2 = Pattern.compile(regex2);

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

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

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

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

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

p6-1

( Written by Tatsuo Ikura )