PatternクラスとMatcherクラス

sample3.javaで使用しているクラスPatternMatcherについ ては上記の教科書で解説されていないので,ここで少しだけ説明しておく.これ らを用いることで,正規表現を利用したパターンマッチングを簡単に行なうこと ができる.

Patternは,(コンパイルされた)正規表現のクラスである.Javaの正規表 現については,Patternクラスの仕様[*]を参照のこと.sample3.javaでは,

   Pattern pat = Pattern.compile(args[0] + ".*?" + args[1]);
によってマッチングに用いる正規表現をコンパイルしてPatternオブジェク トpatを得ている.compileメソッドは正規表現を表す文字列を受け とる.上例のpatは「args[0]から始まってargs[1]で終わる文 字列」にマッチする正規表現のPatternオブジェクトである.また,例えば
   Pattern pat = Pattern.compile("aaa.+bbb");
とすると,「aaaで始まり,一文字以上の文字列を挟んで,bbbで終 わる」文字列にマッチする正規表現のPatternオブジェクトが得られる.

Patternオブジェクトのmatcherメソッドによって,

   Matcher mat = pat.matcher(line);
のように,文字列に対するマッチング操作を行なうエンジンであるMatcherオブジェクトが得られる.

Matcherオブジェクトに対する主な操作にはfindメソッドとgroupメソッドがある.

sample3.javaではこの二つのメソッドのみを用いて,マッチした文字列を 列挙している.

さらに,正規表現中で先方参照を行なうグループを,カッコ(...)を用い て指定することができる.例えば,

   Pattern pat = Pattern.compile("b(.+)f(.+)i");
   Matcher mat = pat.matcher("abcdefghijk");
   mat.find();
とマッチングを行なった後に,mat.group(0)とするとbcdefghiが返 り,mat.group(1)とすると正規表現中の「左から一番目のグループ」であ る,一つ目の.+にマッチした部分であるcdeが返り,同様にmat.group(2)とするとghが返る.

NAKAZAWA Koji
2014-09-30