パターンにマッチした文字列を置換する

広告

正規表現を使ってパターンとマッチした文字列を、指定した新しい文字列へ置換することができます。 Matcher.replaceFirst メソッドは最初にマッチした文字列を置換し、 Matcher.replaceAll メソッドはマッチするすべての文字列を置換します。ここでは Java の正規表現でパターンにマッチした文字列を新しい文字列に置換する方法について解説します。

最初にマッチした文字列を置換する

パターンと最初にマッチした文字列を置換するには Matcher クラスの replaceFirst メソッドを使用します。書式は次のとおりです。

public String replaceFirst​(String replacement)

パラメータ:
replacement - 置換文字列

戻り値:
最初にマッチした部分シーケンスを置換文字列で置き換え、前方参照された部分シーケンスを必要に応じて置換することによって構築された文字列

このメソッドを実行すると、最初に正規表現エンジンをリセットして位置情報をゼロにした上で、パターンと最初にマッチした文字列を 1 番目の引数に指定した文字列に置換した新しい文字列を戻り値として返します。

次のサンプルをみてください。

// java.util.regex.*のインポートが必要です
import java.util.regex.*;

String regex  = "AA|BB";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher​("DD AA CC BB EE");
System.out.println(m.replaceFirst​("FF")); // DD FF CC BB EE

対象の文字列の中で AA|BB とマッチする最初の文字列を FF に置換しています。

※ なお置換する文字列を指定するときに、ドル記号($)とバックスラッシュ(\)は特別な意味を持ちます。その為、置換する文字列の中でこの 2 つの文字を使用する場合はエスケープ処理が必要です。詳しくは「置換する文字列を記述するときにエスケープ処理が必要な文字」を参照されてください。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample27-1.java という名前で保存します。

import java.util.regex.*;

class JSample27_1{
  public static void main(String[] args){
    String target = "DD AA CC BB EE";
    System.out.println(target);

    String regex = "AA|BB";
    Pattern p = Pattern.compile(regex);

    Matcher m = p.matcher​(target);
    System.out.println(m.replaceFirst​("FF"));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample27_1.java

その後で、次のように実行してください。

java JSample27_1

最初にマッチした文字列を置換する(1)

パターンと最初にマッチした文字列を指定の文字列と置換しました。

マッチしたすべての文字列を置換する

パターンとマッチしたすべての文字列を置換するには Matcher クラスの replaceAll メソッドを使用します。書式は次のとおりです。

public String replaceAll​(String replacement)

パラメータ:
replacement - 置換文字列

戻り値:
マッチしたすべての部分シーケンスを置換文字列で置き換え、前方参照された部分シーケンスを必要に応じて置換することによって構築された文字列

このメソッドを実行すると、最初に正規表現エンジンをリセットして位置情報をゼロにした上で、パターンとマッチしたすべての文字列を 1 番目の引数に指定した文字列に置換した新しい文字列を戻り値として返します。

次のサンプルをみてください。

// java.util.regex.*のインポートが必要です
import java.util.regex.*;

String regex  = "AA|BB";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher​("DD AA CC BB EE");
System.out.println(m.replaceAll​("FF")); // DD FF CC FF EE

対象の文字列の中で AA|BB とマッチするすべての文字列を FF に置換しています。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample27-2.java という名前で保存します。

import java.util.regex.*;

class JSample27_2{
  public static void main(String[] args){
    String target = "DD AA CC BB EE";
    System.out.println(target);

    String regex = "AA|BB";
    Pattern p = Pattern.compile(regex);

    Matcher m = p.matcher​(target);
    System.out.println(m.replaceAll​("FF"));
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample27_2.java

その後で、次のように実行してください。

java JSample27_2

マッチしたすべての文字列を置換する(1)

パターンとマッチしたすべての文字列を指定の文字列と置換しました。

-- --

Java の正規表現でマッチした文字列を新しい文字列に置換する方法について解説しました。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。