Jakarta ORO

文字クラスの"\w"と"[a-zA-Z_0-9]"って動作が同じだと思っていたけれど、違うのですね。

テストに使用したクラス

package test;

import org.apache.oro.text.perl.Perl5Util;

/**
 * Perl5Utilの"\w"文字クラスをテストするクラスです。
 *
 * @author manhole
 * @version $Id$
 */
public class Perl5UtilTest {

    /**
     * テストメソッドです。
     */
    public static void main(String[] args) {
        // テスト対象の入力文字列
        String sInput = "abcあいう";

        // Perl互換の正規表現オブジェクト
        Perl5Util perl = new Perl5Util();

        // "\w"の場合
        if (perl.match("m!\\w*!", sInput)) {
            // マッチ文字列を出力
            System.out.println("\\w -> " + perl.group(0));
        }

        // "[a-zA-Z0-9]"の場合
        if (perl.match("m![a-zA-Z_0-9]*!", sInput)) {
            // マッチ文字列を出力
            System.out.println("[a-zA-Z_0-9] -> " + perl.group(0));
        }
    }
}

実行結果

\w -> abcあいう
[a-zA-Z_0-9] -> abc

どちらも"abc"になると思っていたんだけれどなー。

確認したバージョンは2.0.7です。