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

Java正規表現の文字クラス:和集合(union)の使い方をわかりやすく解説

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

文字クラスの和集合(union)という書き方を使うと、指定した複数の範囲のどれかに含まれる文字にマッチさせることができます。つまり、[a-z[0-9]] という式は、小文字のアルファベット(a〜z)または数字(0〜9)のいずれか1文字に一致することを意味します。

サンプルコード

以下のJavaプログラムでは、ユーザーから入力されたテキストに対して、和集合の文字クラス [a-z[0-9]] を適用し、小文字または数字が何文字含まれているかをカウントしています。

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[0-9]]";

        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);

        // コンパイルしたパターンを入力文字列に適用
        Matcher matcher = pattern.matcher(input);

        int count = 0;
        while (matcher.find()) {
            count++;
        }

        System.out.println("Number characters from the ranges (a-z or 0-9): " + count);
    }
}

実行結果

Enter input text:
sample DATA 12345
Number characters from the ranges (a-z or 0-9): 11

解説

入力された「sample DATA 12345」には、小文字(s、a、m、p、l、e)が6文字、数字(1、2、3、4、5)が5文字含まれているため、合計11文字がパターンにマッチしました。大文字の「DATA」は範囲外のためカウントされていません。

このように、和集合の文字クラスを活用すれば、複数の文字範囲を1つの正規表現で簡潔に扱うことができ、入力値のバリデーションや文字数の集計など、さまざまな場面で役立ちます。

  1. Java正規表現のサブ式(?>re)――バックトラックしない独立パターンの解説

    Javaの正規表現におけるサブ式・メタ文字「(?>re)」は、バックトラック(後戻り)を行わない独立したパターンを表します。これは「原子グループ(atomic group)」とも呼ばれ、一度マッチに成功すると、その結果を確定してそれ以降のマッチ処理で再評価されません。バックトラックとは?通常、正規表現エンジンはパターン全体がマッチするように、部分的なマッチ結果を巻き戻して別の組み合わせを試す「バックトラック」を行います。しかし「(?>re)」で囲まれた部分は独立して扱われるため、内部でのマッチが確定した後に外側のパターンとの整合性が取れない場合でも、巻き戻しによる再試行が行われませ

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

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