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

Java正規表現の文字クラス:範囲指定([a-z]・[^A-Z])の使い方を解説

Javaの正規表現における文字クラスは、角括弧「[ ]」を使って定義します。この部分式は、指定された文字の集合の中から1文字にマッチします。例えば、正規表現「[abc]」は、a、b、cのいずれか1文字にマッチします。

文字クラスでは範囲指定も可能です。「[a-z]」のようにハイフンで範囲をつなぐと、アルファベットのaからzまでのいずれか1文字にマッチします。また、先頭に「^」を付けた「[^A-Z]」は、大文字アルファベット以外の1文字にマッチする否定形のパターンになります。

サンプルコード1:小文字(a〜z)の出現数をカウントする

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "[a-z]";
        // パターンオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // コンパイルしたパターンを文字列と照合
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("Number characters from the range (a-z): "+count);
    }
}

実行結果

Enter input text:
sample data 5423 #@ %*&
Number characters from the range (a-z): 10

この例では、入力されたテキストの中から「[a-z]」にマッチする文字(小文字アルファベット)を数えています。数字や記号、空白は対象外となるため、「sample data」の10文字だけがカウントされています。

サンプルコード2:大文字以外の文字が含まれているか判定する

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();
        String regex = "[^A-Z]";
        // パターンオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // コンパイルしたパターンを文字列と照合
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        if (matcher.find()) {
            System.out.println("match occurred");
        } else {
            System.out.println("match not occurred");
        }
    }
}

実行結果1:大文字以外が含まれる場合

Enter input text:
sample data
match occurred

実行結果2:すべて大文字の場合

Enter input text:
SAMPLEDATA
match not occurred

「[^A-Z]」は大文字以外の任意の1文字にマッチするため、入力に小文字やスペースなどが含まれていれば「match occurred」と表示されます。逆に、入力がすべて大文字アルファベットのみで構成されている場合はマッチせず、「match not occurred」と表示されます。

まとめ

  • 文字クラスは角括弧「[ ]」で定義し、集合内のいずれか1文字にマッチする
  • 「[a-z]」のようにハイフンを使うと、連続した文字の範囲を指定できる
  • 「[^...]」のように先頭にキャレットを付けると、指定範囲外の文字にマッチする(否定)
  1. Javaの正規表現におけるサブ式(グループ化)の使い方

    Javaの正規表現において、サブ式(メタ文字)( )は、複数の正規表現をひとつのグループにまとめ、マッチしたテキストを記憶する働きを持ちます。グループ化を活用すると、選択(|)の適用範囲を限定したり、マッチした一部分の文字列を後から取り出したりできるようになります。 例1:基本的なグループ化 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String args[]) { String input =

  2. Javaの正規表現で文字列から数値を抽出する方法

    Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp