Java の正規表現について

Java の正規表現について

正規表現(Regular Expression)は、文字列のパターンマッチングや操作を簡単にするための強力なツールです。このページでは、Javaで正規表現を使用する方法について、例を交えながら詳しく説明します。

正規表現の基本概念

正規表現は、文字列のパターンを記述するための特殊な構文を提供します。これにより、文字列が特定の条件に一致するかを判定したり、文字列を検索・置換したりすることができます。

例えば、以下のようなパターンを記述できます。

  • 特定の単語が含まれているか(例: “cat”)
  • 数字のみで構成されているか(例: “\\d+”)
  • メールアドレス形式か(例: “[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}”)

正規表現の構文

Javaの正規表現の構文は、一般的な正規表現の標準仕様(Perl互換正規表現)に基づいています。以下に主な構文を示します。

  • 文字クラス: [abc] は “a”, “b”, または “c” のいずれかにマッチ。
  • 否定文字クラス: [^abc] は “a”, “b”, “c” 以外の文字にマッチ。
  • 繰り返し: a*(0回以上)、a+(1回以上)、a{3}(3回ちょうど)など。
  • 任意の文字: . は任意の1文字にマッチ。
  • エスケープ文字: \\ を使って特別な意味を持つ文字をエスケープ。

その他の構文については、公式ドキュメントやリファレンスを参照してください。

Java で正規表現を使う方法

Javaでは、正規表現を使用するために java.util.regex パッケージが提供されています。このパッケージには主に以下の2つのクラスがあります。

  • Pattern: 正規表現を表現するクラス。
  • Matcher: 正規表現のパターンと文字列を比較するためのクラス。

基本的な使用方法は以下の通りです。


import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String pattern = "\\d+"; // 数字にマッチする正規表現
        String text = "Java 8 and Java 11 are popular versions.";

        // Pattern と Matcher を使う方法
        Pattern compiledPattern = Pattern.compile(pattern);
        Matcher matcher = compiledPattern.matcher(text);

        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }

        // String クラスの matches メソッドを使う方法
        boolean matches = text.matches(".*Java.*");
        System.out.println("Contains 'Java': " + matches);
    }
}
    

よく使われる例

以下は、実際に役立つ正規表現の例です。

  • メールアドレスの検証: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}
  • 数字のみ: \\d+ は1つ以上の数字にマッチ。
  • 郵便番号の形式(例: 日本の郵便番号): \\d{3}-\\d{4}
  • 特定の単語を含む: \\bJava\\b は “Java” という単語全体にマッチ。

String emailPattern = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}";
String email = "example@test.com";
System.out.println(email.matches(emailPattern)); // true
    

応用的なテクニック

Javaの正規表現では、以下のような応用的なテクニックも使用可能です。

  • グループ化: (...) を使って部分的なパターンをグループ化できます。
  • 名前付きグループ: 一部のJavaバージョンでは、(?<name>...) を使用して名前付きグループを定義できます。
  • 置換: String.replaceAll メソッドを使用して置換操作を行います。

String text = "Price: $100, Discount: $20";
String updatedText = text.replaceAll("\\$\\d+", "$0.00"); // 数値の後に ".00" を追加
System.out.println(updatedText); // Price: $100.00, Discount: $20.00
    

さらに詳しいテクニックやチュートリアルについては、公式ドキュメントやオンラインリソースを参照してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です