Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのPattern.UNICODE_CHARACTER_CLASSフィールドの使い方と実例

Pattern.UNICODE_CHARACTER_CLASSフィールドとは

Javaのjava.util.regex.Patternクラスに用意されているUNICODE_CHARACTER_CLASSフィールドは、正規表現における定義済み文字クラス(Predefined character classes)およびPOSIX文字クラスのUnicodeバージョンを有効にするためのフラグです。

通常、\d\w\sなどの文字クラスはASCII文字のみを対象としますが、このフラグを指定してパターンをコンパイルすると、Unicode規格に準拠した幅広い文字がマッチ対象になります。国際化対応のアプリケーションで正規表現を扱う際に非常に便利です。

使用例

次のコードでは、UNICODE_CHARACTER_CLASSフラグを使って正規表現をコンパイルし、複数の文字列とのマッチング結果を出力しています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UNICODE_CHARACTER_CLASS_Example {
    public static void main(String args[]) {
        String regex = "\u00de";
        // 正規表現をコンパイル
        Pattern pattern = Pattern.compile(regex, Pattern.UNICODE_CHARACTER_CLASS);
        // マッチャーオブジェクトを取得して判定
        String str[] = {"\u00de", "\u00fe", "\u00ee", "\u00ce"};
        for (String ele : str) {
            Matcher matcher = pattern.matcher(ele);
            if (matcher.matches()) {
                System.out.println(ele + " is a match for " + regex);
            } else {
                System.out.println(ele + " is not a match for " + regex);
            }
        }
    }
}

実行結果

Þ is a match for Þ
þ is a match for Þ
î is not a match for Þ
Î is not a match for Þ

コードの解説

この例では、大文字の「Þ」(\u00de)という正規表現に対して、4つの異なる文字列をテストしています。

  • 「Þ」(\u00de):正規表現そのものなのでマッチします。
  • 「þ」(\u00fe):Unicodeのケースマッピングにより、大文字「Þ」の小文字として認識され、マッチします。
  • 「î」(\u00ee)と「Î」(\u00ce):全く別の文字のため、マッチしません。

このように、UNICODE_CHARACTER_CLASSフラグを有効にすると、Unicode標準に基づいた正確な文字分類が行われるため、多言語対応のテキスト処理において信頼性の高いマッチングが可能になります。

  1. JavaのPattern.COMMENTSフィールドとは?使い方を実例付きで解説

    JavaのPatternクラスが持つCOMMENTSフィールドは、正規表現パターンの中に空白文字やコメントを自由に記述できるようにするフラグです。このフラグをcompile()メソッドの第2引数として指定すると、パターン内の空白文字や、#記号で始まるコメント部分はすべて無視されてコンパイルされます。 複雑な正規表現を扱う場合、そのままでは読みにくくなりがちですが、COMMENTSフラグを活用すれば、各部分に説明用のコメントを付けたり、改行やインデントを使って整形したりできるため、可読性と保守性が大きく向上します。なお、このフラグは正規表現内に(?x)を埋め込む方法でも同等の効果が得られます。

  2. 【Java入門】Pattern.CANON_EQフラグの使い方をサンプルコードで解説

    JavaのPatternクラスには、正規表現のマッチング動作を制御するためのさまざまなフラグが用意されています。そのひとつであるCANON_EQフィールドは、「正規化等価(canonical equivalence)」に基づいて文字を照合するためのフラグです。このフラグをcompile()メソッドに指定すると、2つの文字は完全な正準分解(canonical decomposition)の結果が等しい場合に限りマッチするとみなされます。ここでいう正準分解とは、Unicodeのテキスト正規化形式のひとつです。たとえば、アクセント記号付きの合成済み文字(1つのコードポイント)と、基本文字+結合文字(