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

【Java入門】正規表現のPOSIX文字クラス \p{IsLatin} でラテン文字を判定・カウントする方法

Java正規表現における文字クラス \p{IsLatin} は、Unicodeスクリプト「Latin(ラテン文字)」に分類される文字にマッチします。英語のアルファベット(A〜Z、a〜z)はもちろん、é や á、ó のようなアクセント記号付きの文字もラテン文字として扱われるのが特徴です。

この記事では、\p{IsLatin} を使った具体的なサンプルコードを2つ紹介しながら、その使い方を解説します。

\p{IsLatin} の基本的な動作

\p{IsLatin} は、対象の1文字がラテン文字体系(Latin script)に属しているかどうかを判定するパターンです。日本語のひらがなや漢字、ギリシャ文字などにはマッチせず、ラテン系の文字だけを抽出・検出できます。

例1:文字列に含まれるラテン文字の数を数える

次の例では、ユーザーから入力された文字列に対して \p{IsLatin} を適用し、ラテン文字がいくつ含まれているかをカウントしています。

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("Enter a string");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      // 正規表現の定義
      String regex = "\\p{IsLatin}";
      // 正規表現をコンパイル
      Pattern pattern = Pattern.compile(regex);
      // Matcherオブジェクトを取得
      Matcher matcher = pattern.matcher(input);
      int count = 0;
      while(matcher.find()) {
         count++;
      }
      System.out.println("Number of Latin characters: "+count);
   }
}

実行結果

Enter a string
cé dé há ó
Number of Latin characters: 7

入力された「cé dé há ó」のうち、アルファベット本体とアクセント記号を合わせて7文字がラテン文字としてカウントされました。

例2:文字列にラテン文字が含まれるかどうかを判定する

次の例では、正規表現 ^.*\p{IsLatin}.*matches() メソッドに渡すことで、文字列全体の中にラテン文字が1つでも含まれているかどうかを判定しています。

import java.util.Scanner;
public class Example {
   public static void main(String args[]) {
      // ユーザーから文字列を読み込む
      System.out.println("Enter a string");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      // 正規表現の定義
      String regex = "^.*\\p{IsLatin}.*";
      boolean result = input.matches(regex);
      if(result) {
         System.out.println("Given string contains Latin characters");
      } else {
         System.out.println("Given string does not contain Latin characters ");
      }
   }
}

実行結果

Enter a string
sample text y e
Given string contains Latin characters

まとめ

  • \p{IsLatin} は、ラテン文字体系に属する1文字にマッチするPOSIXスタイルの文字クラスです。
  • Matcher.find() をループさせると、文字列中のラテン文字をすべて抽出してカウントできます。
  • ^.*\p{IsLatin}.* のようなパターンと String.matches() を組み合わせれば、文字列への含有チェックも簡単に行えます。

入力値のバリデーションや多言語テキストの解析など、文字種を判別したい場面でぜひ活用してみてください。

  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つの文字列の中から、小文字のみで構成されている文字列