Java正規表現のPOSIX文字クラス\p{XDigit}とは?16進数文字のマッチング方法を実例で解説
POSIX文字クラス \p{XDigit} は、16進数(ヘキサデシマル)で使用される文字、つまり [0-9a-fA-F] に該当する文字にマッチする正規表現パターンです。数字の0〜9に加え、英字のa〜fおよびA〜Fが対象となります。
例1:文字列中の16進数文字をカウントする
以下の例では、ユーザーから入力された文字列の中に、16進数として使える文字がいくつ含まれているかを数えています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SpaceCharacters {
public static void main(String args[]) {
// ユーザーから文字列を読み込む
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 正規表現(16進数文字にマッチ)
String regex = "[\\p{XDigit}]";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("16進数文字の数: " + count);
}
}実行結果
文字列を入力してください Bb12\tc! 16進数文字の数: 5
この例では、「B」「b」「1」「2」「c」の5文字が16進数文字として認識され、カウントされています。「\t」(タブ)や「!」は対象外です。
例2:16進数文字を含む文字列を抽出する
次の例では、複数の入力文字列から、16進数文字を1つでも含んでいる文字列だけを抽出して表示します。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main( String args[] ) {
// 16進数文字を含む行全体にマッチする正規表現
String regex = "^.*\\p{XDigit}.*$";
// 入力データの取得
Scanner sc = new Scanner(System.in);
System.out.println("5つの文字列を入力してください:");
String input[] = new String[5];
for (int i=0; i<5; i++) {
input[i] = sc.nextLine();
}
// Patternオブジェクトを作成
Pattern p = Pattern.compile(regex);
System.out.println("16進数文字を含む文字列:");
for(int i=0; i<5;i++) {
// Matcherオブジェクトを作成
Matcher m = p.matcher(input[i]);
if(m.matches()) {
System.out.println(m.group());
}
}
}
}実行結果
5つの文字列を入力してください: sample 123 xyz @## DEF01 16進数文字を含む文字列: sample 123 DEF01
解説のポイント
\p{XDigit}は[0-9a-fA-F]と同等の働きをし、コードの可読性を高めるために使われます。- 例1では
find()メソッドを使って、文字列内の該当文字を1つずつ走査し、件数を数えています。 - 例2では
matches()メソッドと^.*\p{XDigit}.*$というパターンを組み合わせることで、「16進数文字を少なくとも1つ含む文字列」かどうかを判定しています。 - 「sample」には「a」と「e」、「123」には数字すべて、「DEF01」には「D」「E」「F」「0」「1」が該当するため、これらが出力されています。
このように \p{XDigit} を活用すると、色コード(#FFFFFFなど)やメモリアドレスなど、16進数形式の文字列を扱うバリデーション処理を簡潔に実装できます。
-
【Java正規表現】POSIX文字クラス \p{Upper} で大文字英字をマッチングする方法
POSIX文字クラス \p{Upper} は、大文字の英字(A〜Z)にマッチする正規表現パターンです。Javaの java.util.regex パッケージでは、Pattern クラスや Matcher クラスと組み合わせることで、「文字列がすべて大文字で構成されているかの検証」や「文字列に含まれる大文字の個数カウント」などを簡単に実装できます。 \p{Upper} の基本仕様 \p{Upper} は文字クラス [A-Z] とほぼ同等の働きをし、ASCII範囲の大文字アルファベット1文字にマッチします。Unicode全体を対象にしたい場合は \p{IsUppercase} や \p{Lu} を
-
Java正規表現のPOSIX文字クラス \p{Lower}とは?小文字マッチの基本と実装例
POSIX文字クラス \p{Lower} は、正規表現で小文字のアルファベット(a〜z)1文字にマッチさせるためのパターンです。Javaでは Pattern クラスと Matcher クラスを組み合わせて使うことで、「文字列がすべて小文字で構成されているか」の判定や「小文字がいくつ含まれているか」のカウントなど、さまざまなバリデーション処理に活用できます。例1:入力文字列がすべて小文字かどうかを判定する次のサンプルコードでは、正規表現 ^\p{Lower}+$(行頭から行末まで、すべて小文字アルファベット)を使用し、キーボードから入力された5つの文字列の中から、小文字のみで構成されている文字列