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

Java正規表現のPOSIX文字クラス \p{Alpha} の使い方を解説

Javaの正規表現で使用できるPOSIX文字クラス \p{Alpha} は、英字(アルファベット)に一致する文字クラスです。大文字・小文字のどちらにもマッチするため、英語の文字列を判定したい場合に便利です。

\p{Alpha} の基本仕様

\p{Alpha} は、以下のいずれか1文字に一致します。

  • 大文字のアルファベット(A〜Z)
  • 小文字のアルファベット(a〜z)

なお、数字や記号、空白などは一致対象外となります。似たクラスとして小文字のみに一致する \p{Lower}、大文字のみに一致する \p{Upper} もあります。

例1:英字だけで構成された文字列の判定

次の例では、正規表現 ^\\p{Alpha}+$ を使って、「入力された5つの文字列のうち、英字のみで構成されている文字列」だけを出力します。

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{Alpha}+$";

        // ユーザーから入力を受け取る
        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
sample
243test
##$$@
222356
英字のみの文字列:
hello
sample

この実行結果からわかるように、数字や記号が含まれる 243test##$$@222356 はマッチせず、英字だけで構成された hellosample のみが出力されています。

例2:文字列中の英字の個数を数える

次の例では、正規表現 [\\p{Alpha}] を使って、入力された文字列の中に英字が何文字含まれているかをカウントします。

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

public class Example {
    public static void main(String args[]) {
        // ユーザーから文字列を読み込む
        System.out.println("文字列を入力してください");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        // 正規表現を定義
        String regex = "[\\p{Alpha}]";

        // 正規表現をコンパイルしてPatternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);

        // Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("英字の数:" + count);
    }
}

実行結果

文字列を入力してください
sample text
英字の数:10

入力された sample text には空白が1つ含まれていますが、空白はカウントされず、英字10文字のみがカウントされています。

まとめ

  • \p{Alpha} は大文字・小文字のアルファベット1文字に一致するPOSIX文字クラス。
  • ^\\p{Alpha}+$ のように使えば「英字のみの文字列」かどうかの判定が可能。
  • find() メソッドと組み合わせれば、文字列中の英字の出現回数を数えられる。
  1. 【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} を

  2. Java正規表現のPOSIX文字クラス \p{Lower}とは?小文字マッチの基本と実装例

    POSIX文字クラス \p{Lower} は、正規表現で小文字のアルファベット(a〜z)1文字にマッチさせるためのパターンです。Javaでは Pattern クラスと Matcher クラスを組み合わせて使うことで、「文字列がすべて小文字で構成されているか」の判定や「小文字がいくつ含まれているか」のカウントなど、さまざまなバリデーション処理に活用できます。例1:入力文字列がすべて小文字かどうかを判定する次のサンプルコードでは、正規表現 ^\p{Lower}+$(行頭から行末まで、すべて小文字アルファベット)を使用し、キーボードから入力された5つの文字列の中から、小文字のみで構成されている文字列