Java正規表現のPOSIX文字クラス \p{Alnum} の使い方
\p{Alnum}とは
Javaの正規表現におけるPOSIX文字クラス \p{Alnum} は、英数字(アルファベットと数字)に一致するパターンです。文字列の中から英字や数字だけを抽出したり、入力値が英数字のみで構成されているかを検証したりする際に便利です。
なお、\p{Alnum} を使用する場合は、角括弧 [\p{Alnum}] のように文字クラスとして記述するか、単体で使用します。半角英字(a〜z、A〜Z)と半角数字(0〜9)が一致対象となります。
例1:文字列中の英数字の数をカウントする
次の例では、ユーザーから入力された文字列の中に、英数字がいくつ含まれているかをカウントします。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AlphanumericExample {
public static void main(String args[]) {
// ユーザーから文字列を読み込む
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 正規表現(英数字に一致)
String regex = "[\\p{Alnum}]";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("英数字の数: " + count);
}
}実行結果1
文字列を入力してください sample 123 英数字の数: 9
「sample 123」には英字6文字と数字3文字の合計9文字が含まれているため、結果は「9」となります。スペースは英数字ではないためカウントされません。
実行結果2
文字列を入力してください @$#%&* 英数字の数: 0
記号のみの文字列を入力した場合、一致する英数字が存在しないため、結果は「0」になります。
例2:英数字のみで構成された文字列を判定する
次の例では、正規表現 ^\p{Alnum}+$ を使って、入力された複数の文字列のうち、英数字のみで構成されているものを抽出します。^ と $ はそれぞれ文字列の先頭と末尾を表し、+ は1回以上の繰り返しを意味します。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main( String args[] ) {
// 英小文字に一致させる正規表現
String regex = "^\\p{Alnum}+$";
// 入力データを取得
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("英数字のみで構成された文字列: ");
for(int i=0; i<5;i++) {
// Matcherオブジェクトを作成
Matcher m = p.matcher(input[i]);
if(m.matches()) {
System.out.println(m.group());
}
}
}
}実行結果
5つの文字列を入力してください: hello 1234 243test ##$$@ *** 英数字のみで構成された文字列: hello 1234 243test
この例では、「hello」「1234」「243test」の3つが英数字のみで構成されているため出力されます。一方、「##$$@」や「***」は記号を含むため、パターンに一致せず除外されます。
まとめ
\p{Alnum}は英字と数字に一致するPOSIX文字クラスです。- 文字列内の英数字を検索・カウントするだけでなく、
^\p{Alnum}+$のようにすることで、文字列全体が英数字のみかどうかのバリデーションにも利用できます。 - ユーザー入力のチェックなど、実際の開発現場でよく使われるパターンです。
-
【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つの文字列の中から、小文字のみで構成されている文字列