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

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

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

例1:入力文字列がすべて小文字かどうかを判定する

次のサンプルコードでは、正規表現 ^\p{Lower}+$(行頭から行末まで、すべて小文字アルファベット)を使用し、キーボードから入力された5つの文字列の中から、小文字のみで構成されている文字列だけを出力します。

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

public class Posix_LowerExample {
   public static void main(String args[]) {
      // 小文字にマッチする正規表現
      String regex = "^\\p{Lower}+$";
      // 入力データの読み込み
      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つの文字列を入力してください:
Raju
RAMU
rahman
radha
SUnDar*
小文字のみで構成された文字列:
rahman
radha

この実行例では、「Raju」「RAMU」「SUnDar*」は大文字や記号を含むためマッチせず、すべて小文字の「rahman」と「radha」だけが出力されています。

例2:文字列に含まれる小文字の数をカウントする

次のサンプルコードでは、\p{Lower} にマッチする箇所を find() メソッドで順に検索し、ヒットした回数を数えることで、入力文字列内の小文字の個数を求めています。

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{Lower}";
      // 正規表現をコンパイルしてPatternオブジェクトを生成
      Pattern pattern = Pattern.compile(regex);
      // Matcherオブジェクトを取得
      Matcher matcher = pattern.matcher(input);
      int count = 0;
      while (matcher.find()) {
         count++;
      }
      System.out.println("入力された文字列に含まれる小文字の数:" + count);
   }
}

実行結果1

文字列を入力してください
Hello How Are You
入力された文字列に含まれる小文字の数:10

「Hello How Are You」には小文字が10個(e、l、l、o、o、w、r、e、o、u)含まれているため、10と出力されます。

実行結果2

文字列を入力してください
WELCOME TO TUTORIALSPOINT
入力された文字列に含まれる小文字の数:0

すべて大文字とスペースで構成されているため、小文字の数は0になります。

\p{Lower} を使う際のポイント

  • マッチ対象: \p{Lower} はASCIIの小文字アルファベット(a〜z)1文字にマッチします。[a-z] とほぼ同等の働きをします。
  • 文字列全体の判定: 文字列全体が小文字のみかを調べるには、^(行頭)と $(行末)のアンカーに +(1回以上の繰り返し)を組み合わせた ^\p{Lower}+$ を使います。
  • 大文字との対比: 大文字アルファベット(A〜Z)にマッチさせたい場合は \p{Upper} を使用します。
  • Unicode対応: デフォルトではASCIIのみが対象ですが、Pattern.UNICODE_CHARACTER_CLASS フラグを有効にすると、Unicode上の小文字にもマッチするようになります。
  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