任意の一文字と量指定子の組み合わせ

広告

任意の一文字にマッチするメタ文字"."と量指定子であるメタ文字"*"や"+"を組み合わせることで、任意の文字が繰り返し現れた場合にマッチするパターンを作成することが出来ます。

例として"'"と"'"の間に任意の文字が繰り返し現れるパターンは次のようになります。

"'.+'"

上記の場合、メタ文字"+"の直前の文字がメタ文字"."となっています。"+"は直前の文字を1回以上繰り返す場合にマッチし、"."は任意の一文字にマッチします。結果として".+"は任意の文字が1回以上繰り返す場合にマッチすることになります。よって"'"と"'"の間にどんな文字が何文字記述されていてもマッチすることになります。

○ abc'def'ghi
○ my namae is 'ken'

ただし、どの部分にマッチするかについては十分に注意する必要があります。

One 'Hamburger' and a 'Coffee' please

上記の文字列に対して"'.+'"がマッチする可能性があるのは「'Hamburger'」「'Hamburger' and a '」「'Hamburger' and a 'Coffee'」などがあります。いずれも"'"から始まり、任意の文字が1文字以上続き、"'"で終わっています。マッチするかどうかだけを調べるのではなく、どこにマッチするのかが重要な場合は十分な注意が必要です。

サンプルプログラム

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

JSample8_1.java

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

class JSample8_1{
  public static void main(String args[]){
    String str1 = "My name is 'Tanaka'";
    String str2 = "your 'first' name";
    String str3 = "I'm a student";

    String regex1 = "'.+'";
    Pattern p1 = Pattern.compile(regex1);

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

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

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

p8-1

( Written by Tatsuo Ikura )