JavaのPOSIX文字クラスについて

JavaのPOSIX文字クラスについて

Javaでは正規表現を使用して文字列を操作する際、POSIX(Portable Operating System Interface)文字クラスを利用することで、特定の文字セットを簡潔に指定できます。これにより、プラットフォームに依存しない正規表現の構築が可能になります。

以下では、JavaのPOSIX文字クラスについて詳しく解説し、各クラスの例を示します。

POSIX文字クラスとは

POSIX文字クラスは、正規表現内で文字のカテゴリを簡単に指定するための方法です。たとえば、英字、数字、スペースなどのグループを表すのに役立ちます。Javaでは、POSIX文字クラスは Pattern クラスでサポートされており、Unicodeカテゴリをベースとしたクラスが使用可能です。

これらのクラスを使うことで、プラットフォーム間で一貫した正規表現の挙動を実現できます。

POSIX文字クラスの構文

POSIX文字クラスは、正規表現の \p{} または \P{} 形式を使用します。

  • \p{ClassName}: 指定したクラスにマッチします。
  • \P{ClassName}: 指定したクラス以外にマッチします。

たとえば、\p{Lower} は小文字にマッチし、\P{Lower} は小文字以外にマッチします。

主要なPOSIX文字クラスと例

以下はJavaで使用できる主要なPOSIX文字クラスと、それぞれの例です。

\p{Lower}

英字の小文字にマッチします。


String regex = "\\p{Lower}";
System.out.println("abc".matches(regex)); // false
System.out.println("a".matches(regex));  // true
System.out.println("A".matches(regex));  // false
    

\p{Upper}

英字の大文字にマッチします。


String regex = "\\p{Upper}";
System.out.println("A".matches(regex));  // true
System.out.println("a".matches(regex));  // false
System.out.println("1".matches(regex));  // false
    

\p{Alpha}

英字(大文字または小文字)にマッチします。


String regex = "\\p{Alpha}";
System.out.println("A".matches(regex));  // true
System.out.println("z".matches(regex));  // true
System.out.println("1".matches(regex));  // false
    

\p{Digit}

数字(0〜9)にマッチします。


String regex = "\\p{Digit}";
System.out.println("1".matches(regex));  // true
System.out.println("a".matches(regex));  // false
    

\p{Alnum}

英数字(英字および数字)にマッチします。


String regex = "\\p{Alnum}";
System.out.println("A".matches(regex));  // true
System.out.println("1".matches(regex));  // true
System.out.println("#".matches(regex));  // false
    

\p{Punct}

句読点にマッチします。


String regex = "\\p{Punct}";
System.out.println("!".matches(regex));  // true
System.out.println("a".matches(regex));  // false
    

\p{Space}

空白文字にマッチします。


String regex = "\\p{Space}";
System.out.println(" ".matches(regex));  // true
System.out.println("a".matches(regex));  // false
    

カスタムパターンとの組み合わせ

POSIX文字クラスは、他の正規表現パターンと組み合わせて使用することができます。

例: 英字と数字の組み合わせをマッチ


String regex = "\\p{Alpha}\\p{Digit}";
System.out.println("a1".matches(regex)); // true
System.out.println("aa".matches(regex)); // false
    

例: 小文字以外の文字を検出


String regex = "\\P{Lower}";
System.out.println("A".matches(regex));  // true
System.out.println("a".matches(regex));  // false
System.out.println("1".matches(regex));  // true
    

例: 文全体の検証


String regex = "[\\p{Alnum}\\p{Space}]+";
System.out.println("Hello World".matches(regex)); // true
System.out.println("Hello@World".matches(regex)); // false
    

まとめ

JavaのPOSIX文字クラスは、特定の文字カテゴリを簡単に指定するための便利なツールです。これらを活用することで、複雑な文字列パターンを効率的に処理できます。実際の使用にあたっては、文字列の特性や要件に応じて適切なクラスを選択してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です