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

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


\p{ASCII}は、Java正規表現で利用できるPOSIX文字クラスの一つです。このクラスはASCII文字(\x00~\x7F)にマッチします。

ASCII文字とは、コードポイント0~127に割り当てられた半角の英数字・記号・空白・制御文字などのことです。そのため、ひらがな・カタカナ・漢字といった全角文字や、éのようなアクセント付きラテン文字はマッチしません。

主なPOSIX文字クラス

\p{ASCII}とあわせて覚えておくと便利な、主なPOSIX文字クラスは以下のとおりです。

  • \p{Alpha} … 英字(A~Z、a~z)
  • \p{Digit} … 数字(0~9)
  • \p{Alnum} … 英数字
  • \p{Upper}\p{Lower} … 大文字/小文字の英字
  • \p{Space} … 空白文字
  • \p{Punct} … 句読点などの記号

サンプルプログラム

次の例では、ユーザーが入力した文字列に含まれるASCII以外の文字の個数を数えます。否定文字クラス[^\p{ASCII}]を使うことで、「ASCII文字以外の1文字」にマッチさせています。

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();

        // 正規表現:ASCII以外の文字にマッチさせる
        String regex = "[^\\p{ASCII}]";

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

        // マッチした件数(=ASCII以外の文字数)をカウント
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("ASCII以外の文字数:" + count);
    }
}

実行結果

文字列を入力してください
Hello 世界
ASCII以外の文字数:2

コードのポイント

  • Pattern.compile()で正規表現をコンパイルし、pattern.matcher(input)で入力文字列に対するMatcherオブジェクトを取得します。
  • find()は、マッチするたびに次の一致位置へ進みながらtrueを返します。whileループで繰り返し呼び出すことで、マッチした文字の総数をカウントできます。
  • 逆にASCII文字の個数を数えたい場合は、パターンを[\p{ASCII}]に変更するだけで対応できます。

なお、文字列全体がASCII文字のみで構成されているかどうかを判定したい場合は、matches("\\p{ASCII}*")のように書くと簡潔に実装できます。

  1. Javaの正規表現(RegEx)で非単語文字をマッチさせる方法をわかりやすく解説

    Javaの正規表現では、英字(大文字・小文字の両方)および数字(0〜9)以外のすべての文字が「非単語文字(non-word character)」として扱われます。記号や空白などがこれに該当します。こうした文字をマッチさせたい場合は、メタ文字 \W を使用します。なお、\W は文字クラス [^a-zA-Z0-9_] と同等の意味を持ちます。注意点として、アンダースコア(_)は単語文字に含まれるため、\W にはマッチしません。例1:PatternクラスとMatcherクラスを使った方法先頭から5文字がすべて非単語文字であるかどうかを判定する例です。正規表現 ^\W{5} を使って、入力文字列の冒

  2. Java正規表現(RegEx)で任意の文字にマッチさせる方法

    Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j