- Home ›
- Java入門 ›
- Java正規表現の使い方
UNICODE_CHARACTER_CLASSフラグ(Unicodeバージョンの定義済み文字クラスとPOSIX文字クラスを有効にする)
Java の正規表現で利用可能なフラグの一つである UNICODE_CHARACTER_CLASS フラグの使い方です。 UNICODE_CHARACTER_CLASS フラグを有効にすると、 Unicode バージョンの定義済み文字クラスと POSIX 文字クラスが利用できるようになります。ここでは Java の正規表現における UNICODE_CHARACTER_CLASS フラグの使い方について解説します。
(Last modified: )
UNICODE_CHARACTER_CLASSフラグを有効にする
UNICODE_CHARACTER_CLASS フラグは Java で利用可能なフラグの一つで、 有効にすることで Unicode バージョンの定義済み文字クラスと POSIX 文字クラスが利用できるようになります。
UNICODE_CHARACTER_CLASS フラグを有効にするには、 compile メソッドの引数に Pattern.UNICODE_CHARACTER_CLASS を指定してパターンオブジェクトを作成してください。
String r = "ABC";
Pattern p = Pattern.compile(r, Pattern.UNICODE_CHARACTER_CLASS);
またはパターンを表す文字列の中に埋め込みフラグの (?U) を記述してください。
String r = "(?U)ABC"; Pattern p = Pattern.compile(r);
Unicode バージョンの定義済み文字クラスと POSIX 文字クラスの一覧は次のとおりです。
\p{Lower} 小文字:\p{IsLowercase} \p{Upper} 大文字:\p{IsUppercase} \p{ASCII} すべてのASCII文字: [\x00-\x7F] \p{Alpha} 英字:\p{IsAlphabetic} \p{Digit} 10進数の文字:\p{IsDigit} \p{Alnum} 英数字:[\p{IsAlphabetic}\p{IsDigit}] \p{Punct} 句読記号:\p{IsPunctuation} \p{Graph} 表示できる文字: [^\p{IsWhite_Space}\p{gc=Cc}\p{gc=Cs}\p{gc=Cn}] \p{Print} プリント可能文字: [\p{Graph}\p{Blank}&&[^\p{Cntrl}]] \p{Blank} 空白またはタブ: [\p{IsWhite_Space}&&[^\p{gc=Zl}\p{gc=Zp}\x0a\x0b\x0c\x0d\x85]] \p{Cntrl} 制御文字: \p{gc=Cc} \p{XDigit} 16進数字: [\p{gc=Nd}\p{IsHex_Digit}] \p{Space} 空白文字:\p{IsWhite_Space} \d 数字: \p{IsDigit} \D 数字以外: [^\d] \s 空白文字: \p{IsWhite_Space} \S 非空白文字: [^\s] \w 単語構成文字: [\p{Alpha}\p{gc=Mn}\p{gc=Me}\p{gc=Mc}\p{Digit}\p{gc=Pc}\p{IsJoin_Control}] \W 非単語文字: [^\w]
UNICODE_CHARACTER_CLASSフラグによるマッチングの違い
UNICODE_CHARACTER_CLASS フラグを有効にした場合にどのように変わるのかを確認します。パターンとして A\sB を指定した場合で試してみます。
String r = "A\\sB"; Pattern p = Pattern.compile(r);
デフォルトでは定義済み文字クラスで空白文字とマッチする \s は全角スペースにはマッチしません。
〇 A B
✕ A B
次に UNICODE_CHARACTER_CLASS フラグを有効にしてみます。
String r = "A\\sB"; Pattern p = Pattern.compile(r, Pattern.UNICODE_CHARACTER_CLASS);
Unicode バージョンの定義済み文字クラスで空白文字とマッチする \s は全角スペースにもマッチします。
〇 A B 〇 A B
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample25-1.java という名前で保存します。
import java.util.regex.*; class JSample25_1{ public static void main(String[] args){ String target1 = "A B"; String target2 = "A B"; String regex = "A\\sB"; Pattern p1 = Pattern.compile(regex); Matcher m1_1 = p1.matcher(target1); System.out.println(target1 + ":" + m1_1.find()); Matcher m1_2 = p1.matcher(target2); System.out.println(target2 + ":" + m1_2.find()); System.out.println("---- ----"); Pattern p2 = Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS); Matcher m2_1 = p2.matcher(target1); System.out.println(target1 + ":" + m2_1.find()); Matcher m2_2 = p2.matcher(target2); System.out.println(target2 + ":" + m2_2.find()); } }
コンパイルを行います。
javac -encoding UTF-8 JSample25_1.java
その後で、次のように実行してください。
java JSample25_1
UNICODE_CHARACTER_CLASS フラグを有効にすることで、定義済み文字クラスが Unicode 対応のものとなり、空白文字を表す文字クラスの \s が全角スペースにもマッチするようになりました。
-- --
Java の正規表現における UNICODE_CHARACTER_CLASS フラグの使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。