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