013 クラスライブラリ(正規表現のパターンを扱うクラス) 020 解答例

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

public class IPv4Validator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // ユーザーからの入力を取得
        System.out.println("IPv4アドレスを入力してください: ");
        String userInput = scanner.nextLine();

        // IPv4アドレスの正規表現パターン
        String ipv4Pattern = "^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$";

        // 正規表現パターンをコンパイル
        Pattern pattern = Pattern.compile(ipv4Pattern);

        // Matcherを作成
        Matcher matcher = pattern.matcher(userInput);

        // IPv4アドレスの検証結果を表示
        if (matcher.matches()) {
            System.out.println("有効なIPv4アドレスです。");
        } else {
            System.out.println("無効なIPv4アドレスです。");
        }
    }
}

このプログラムでは、^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$ という正規表現パターンを使用しています。このパターンはIPv4アドレスの一般的な形式に一致するように構築されています。ユーザーからの入力がこのパターンに一致するかどうかを検証しています。

正規表現でのエスケープ

正規表現では、特定の文字や文字列に対して特別な意味を持つメタ文字があります。これらのメタ文字を文字として扱いたい場合、エスケープを行う必要があります。エスケープは通常、バックスラッシュ \ を使用して行います。

以下は、一般的な正規表現メタ文字とそのエスケープの例です:

  1. ピリオド .:
    • ピリオドは任意の1文字に一致するメタ文字です。例えば、A.B は “A” と “B” の間にどんな1文字でも一致します。ピリオド自体を検索したい場合は、A\.B のようにエスケープします。
  2. バックスラッシュ \:
    • バックスラッシュ自体がメタ文字として使用されます。例えば、\d は任意の数字に一致します。バックスラッシュ自体を検索したい場合は、\\ とエスケープします。
  3. 角括弧 []:
    • 角括弧はキャラクタクラスを定義します。例えば、[aeiou] は母音に一致します。角括弧自体を検索したい場合は、\\[\\] のようにエスケープします。
  4. ハイフン -(範囲指定の場合):
    • 角括弧内でハイフンを使用すると、範囲を指定できます。例えば、[0-9] は0から9までの数字に一致します。ハイフン自体を検索したい場合は、\\- とエスケープします。

これらの例を通じて、正規表現内でメタ文字をそのまま検索するためにはエスケープが必要であることがわかります。エスケープを忘れると、意図しない結果が生じる可能性があります。

「013 クラスライブラリ」問題集リスト