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

Javaの正規表現とは?基礎知識と使い方をわかりやすく解説

正規表現(Regular Expression)とは、入力テキストを検索・処理するための「パターン」を定義する特殊な文字列のことです。1つ以上の文字や記号を組み合わせて構成されており、正規表現を活用することで、文字列の検索や置換を効率的かつ柔軟に行うことができます。

Javaでは、java.util.regexパッケージによって正規表現によるパターンマッチング機能が提供されています。このパッケージには、主に次の3つのクラスが含まれています。

java.util.regexパッケージの主要なクラス

1. Patternクラス

Patternクラスは、コンパイル済みの正規表現を表すクラスです。文字列と正規表現を照合するために、次の2つのメソッドが用意されています。

  • compile():正規表現を表す文字列を引数として受け取り、そのパターンを持つPatternオブジェクトを生成して返します。
  • matcher():対象の文字列を引数として受け取り、現在のPatternオブジェクトが表すパターンとの照合を行うMatcherオブジェクトを生成します。

2. Matcherクラス

Matcherクラスは、実際にマッチング操作を実行する「エンジン」となるクラスです。マッチした結果を取得するには、主に次の2つのメソッドを使用します。

  • find():マッチ操作が成功した場合はtrueを、失敗した場合はfalseを返します。
  • group():グループ番号を表す整数値を引数として受け取り、マッチ操作において指定グループがキャプチャした文字列を返します。

3. PatternSyntaxExceptionクラス

PatternSyntaxExceptionは、正規表現パターンに構文エラーが含まれていることを示す非チェック例外です。無効な正規表現をcompile()メソッドに渡すとスローされます。

サンプルコード1:ASCII以外の文字を削除する

次の例では、正規表現「[^\\p{ASCII}]」(ASCII以外の任意の1文字に一致するパターン)を使用し、入力文字列からASCII範囲外の文字をすべて除去しています。

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

public class Example {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input string: ");
        String input = sc.nextLine();

        String regex = "[^\\p{ASCII}]";
        // パターンオブジェクトの作成
        Pattern pattern = Pattern.compile(regex);
        // 文字列内でコンパイル済みパターンと照合
        Matcher matcher = pattern.matcher(input);
        // 空のStringBufferを作成
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        System.out.println("Result: \n" + sb.toString());
    }
}

実行結果

Enter input string:
whÿ do we fall
Result:
wh do we fall

入力「whÿ do we fall」に対して、ASCII範囲外の文字「ÿ」が取り除かれ、「wh do we fall」と出力されていることがわかります。

サンプルコード2:特定の文字が出現する位置を検索する

次の例では、正規表現「[t]」を使用し、入力テキスト中に文字「t」が出現する位置(インデックス)を順番に出力しています。

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

public class StartExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input text: ");
        String input = sc.nextLine();

        String regex = "[t]";
        // パターンオブジェクトの作成
        Pattern pattern = Pattern.compile(regex);
        // 文字列内でコンパイル済みパターンと照合
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            int start = matcher.start();
            System.out.println(start);
        }
    }
}

実行結果

Enter input text:
Hello how are you welcome to Tutorialspoint
26
31
42

このように、find()メソッドをwhileループと組み合わせることで、パターンに一致する箇所をすべて順に処理できます。

まとめ

Javaにおける正規表現処理の基本的な流れは、「Pattern.compile()でパターンを生成 → matcher()でMatcherオブジェクトを取得 → find()やgroup()で照合結果を取得」というステップです。これらを組み合わせることで、文字列の検証・抽出・置換といった処理を強力かつ簡潔に実装することができます。

  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

  2. Pythonの正規表現とは?基本の考え方と主な使い方をわかりやすく解説

    正規表現とは何か 正規表現(Regular Expression)とは、文字列の中から特定のパターンを検索したり置換したりするために用いられる、文字の並び(パターン)のことです。シンプルに言えば、「文字列の中から目的のパターンを見つけ出し、必要に応じて書き換えるための記法」と理解するとよいでしょう。 正規表現はPythonだけでなく、Perl、R、Javaなど、ほとんどのプログラミング言語でサポートされており、テキスト処理における共通の基礎技術となっています。 正規表現が活躍する場面 正規表現は、ソースコード、ログファイル、スプレッドシート、さらにはドキュメントといったテキストデータから情報