Java正規表現のPOSIX文字クラス\p{InGreek}でギリシャ文字を扱う方法
\p{InGreek}とは
Java正規表現におけるPOSIX文字クラスの一つである \p{InGreek} は、Unicodeブロック「Greek」に属するギリシャ文字にマッチします。この文字クラスを利用することで、入力された文字列の中からギリシャ文字だけを抽出・カウントしたり、文字列にギリシャ文字が含まれているかどうかを判定したりすることができます。
例1:ギリシャ文字の出現回数を数える
次のプログラムでは、ユーザーから文字列を読み込み、正規表現 \p{InGreek} を使って、その中に含まれるギリシャ文字の数をカウントしています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example1 {
public static void main(String args[]) {
// ユーザーから文字列を読み込む
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 正規表現
String regex = "\\p{InGreek}";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("ギリシャ文字の数: " + count);
}
}実行結果
文字列を入力してください sample text αγ ηθ ξψ ギリシャ文字の数: 6
この例では、Matcher クラスの find() メソッドを使い、入力文字列内でパターンに一致する部分を先頭から順に検索し、一致が見つかるたびにカウントを1ずつ増やしています。その結果、「αγ ηθ ξψ」に含まれる6つのギリシャ文字がすべて検出されました。
例2:文字列にギリシャ文字が含まれているか判定する
次の例では、String クラスの matches() メソッドと正規表現 ^.+\p{InGreek}.+ を使って、入力された文字列にギリシャ文字が含まれているかどうかを判定しています。
import java.util.Scanner;
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{InGreek}.+";
boolean result = input.matches(regex);
if(result) {
System.out.println("指定された文字列にはギリシャ文字が含まれています");
} else {
System.out.println("指定された文字列にはギリシャ文字が含まれていません");
}
}
}実行結果
文字列を入力してください sample text αγ 指定された文字列にはギリシャ文字が含まれています
ここで使用している正規表現「^.+\p{InGreek}.+」は、「任意の1文字以上の後にギリシャ文字が続き、さらにその後に任意の1文字以上が続く」という意味です。matches() メソッドは文字列全体との一致を判定するため、実際には文字列のどこかにギリシャ文字が1つでも存在すれば true が返されます。
ポイントまとめ
\p{InGreek}は、Unicodeブロック「Greek」に属する文字にマッチするPOSIX文字クラスです。Pattern.compile()で正規表現をコンパイルし、matcher()でMatcherオブジェクトを生成して使用します。find()メソッドで一致箇所を順次検索でき、matches()メソッドでは文字列全体との一致を判定できます。
-
Javaの正規表現(RegEx)で非単語文字をマッチさせる方法をわかりやすく解説
Javaの正規表現では、英字(大文字・小文字の両方)および数字(0〜9)以外のすべての文字が「非単語文字(non-word character)」として扱われます。記号や空白などがこれに該当します。こうした文字をマッチさせたい場合は、メタ文字 \W を使用します。なお、\W は文字クラス [^a-zA-Z0-9_] と同等の意味を持ちます。注意点として、アンダースコア(_)は単語文字に含まれるため、\W にはマッチしません。例1:PatternクラスとMatcherクラスを使った方法先頭から5文字がすべて非単語文字であるかどうかを判定する例です。正規表現 ^\W{5} を使って、入力文字列の冒
-
Java正規表現(RegEx)で任意の文字にマッチさせる方法
Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j