JavaのMatcherクラスappendTail()メソッドの使い方をサンプルコードで解説
java.util.regex.Matcherクラスとは
java.util.regex.Matcherクラスは、正規表現を用いた様々なマッチ操作を実行するためのエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを呼び出すことでMatcherオブジェクトを取得します。
MatcherクラスのappendTail()メソッドは、引数としてStringBufferオブジェクトを受け取り、入力シーケンスのうちマッチ処理の対象とならなかった残りの文字列を、そのバッファの末尾に追加します。
appendTail()は単体でも利用できますが、一般的にはfind()メソッドでマッチ位置を進めながらappendReplacement()メソッドで置換結果を追加し、最後に残りの文字列を結合するという使い方がされます。
appendTail()メソッドの使用例
次のプログラムでは、HTML文字列から<b>タグで囲まれた内容を正規表現で抽出しています。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class AppendTail {
public static void main(String[] args) {
String str = "<p>This <b>is</b> an <b>example</b> HTML <b>script</b>.</p>";
// bタグの内容にマッチする正規表現
String regex = "<b>(\\S+)</b>";
// Patternオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// 文字列にパターンを適用してMatcherを取得
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer();
// 入力シーケンスの残りをStringBufferへ追加
matcher.appendTail(sb);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
System.out.println("StringBufferの内容: \n" + sb);
}
}
実行結果
is example script StringBufferの内容: <p>This <b>is</b> an <b>example</b> HTML <b>script</b>.</p>
プログラムのポイント
この例で注目すべきは、find()ループを開始する前にappendTail(sb)を呼び出している点です。appendTail()を呼び出した時点ではまだ一度もマッチ操作が行われていないため、「マッチ処理の対象外となった残りの文字列」、つまり入力シーケンス全体がそのままStringBufferに追加されます。その結果、出力されるStringBufferの内容は元のHTML文字列と完全に一致します。
実際の開発では、find()でマッチを繰り返しながらappendReplacement()で置換を行い、ループ終了後にappendTail()を呼び出して最後のマッチ以降の残りの文字列を追加するのが典型的な使い方です。
-
JavaのMatcher.matches()メソッドとは?使い方をサンプルコード付きで解説
java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使ってオブジェクトを取得します。 matches()メソッドは、対象の文字列全体が、Patternオブジェクトの作成時に指定された正規表現パターンと一致するかどうかを判定します。一致する場合はtrueを返し、一致しない場合はfalseを返します。重要なポイントとして、このメソッドがtrueを返すためには、検索対象の領域全体がパターンに一致し
-
JavaのMatcherクラスstart()メソッドとは?サンプルコード付きで解説
java.util.regex.Matcherクラスは、正規表現を用いたさまざまなマッチ操作を実行するエンジンを表すクラスです。このクラスにはコンストラクタが用意されておらず、java.util.regex.Patternクラスのmatcher()メソッドを使用することで、Matcherオブジェクトを取得できます。 Matcherクラスのstart()メソッドは、直前にマッチした文字列の開始インデックス(先頭からの位置)をint型で返します。 start()メソッドの基本的な動作 正規表現における文字クラス「[...]」は、括弧内に指定したいずれか1文字に一致します。以下の例では、この文字クラ