Groovyメモ(続き)

Groovyの正規表現についてのメモの続きである。
昨日書いた納得のいかない部分をJavaで書き直すとこんな感じか。


import java.util.regex.*;

public class Test_RegExp {
public static void main(String[] args){
String strBuf = "a12345";
String strPat = "\\d{5}";
//String strPat = "^a[0-9]*$";
Pattern pattern = Pattern.compile(strPat);
Matcher matcher = pattern.matcher(strBuf);
if(matcher.matches()){
System.out.println("match!");
}else{
System.out.println("Not match!!!!");
}
}
}

このときの実行結果はNot match!!!!が出力される。
正規表現の比較演算子の使い方云々ではなくて、俺のjava.util.regex.matcherオブジェクトの振る舞いの認識が間違っていたようだ。
\\d{5}をやめて[0-9]{5}としてもマッチしない。
どうやら、Stringのインスタンス(ここでは"a12345")に完全一致するような
正規表現じゃないと、matches()メソッドはTrueを返してくれないようなのである。
なので、次のような書き方だと大丈夫。
[a-z][0-9]*
^a12345$
a\d{5} // 実際にはエスケープが要る
要するに[0-9]{5}のように部分一致ではFalseを返すらしい。(8へぇ)


腐れJavaプログラマの言い訳:
拙者、一応仕事ではJavaを触る機会が多いのだが、その全てが使用している商用フレームワークの都合上J2SE1.3(じゃっかん、カビが生えている環境)なのである。
いや、実用上なんの問題もないのだ、ロギングしたいときは、Loggerなどというハイカラな代物を使うのではなく、Log4Jを使い、
Assertなぞ、標準ライブラリになくてもJUnitで使えるわけなのだ。
したがって、正規表現で文字列比較を取るには、Jakarta-oroを使っているのである。
むー。しかし、いつの間にやら置いていかれた気分。
世間は進んどるなー。もうすでにTigerとか出てるし。
実はJavaプログラムやってます、なんて喋っちゃイカンのかも。