sample3.javaで使用しているクラスPatternとMatcherについ ては上記の教科書で解説されていないので,ここで少しだけ説明しておく.これ らを用いることで,正規表現を利用したパターンマッチングを簡単に行なうこと ができる.
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メソッドがある.
さらに,正規表現中で先方参照を行なうグループを,カッコ(...)を用い て指定することができる.例えば,
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