Java正規表現を使った複数行テキストの照合方法
Javaで複数行にわたる入力データを正規表現で照合・検索するには、文字列を行ごとに分割してから、各行に対してパターンマッチングを実行するのが効果的です。以下の手順に従って実装できます。
複数行照合の手順
- 対象となる入力文字列を取得します。
- splitメソッドの引数に「\r?\n」を渡し、文字列を改行ごとに分割してトークン配列を作成します。
- Patternクラスのcompile()メソッドを使用して、必要な正規表現をコンパイルします。
- matcher()メソッドを呼び出してMatcherオブジェクトを取得します。
- forループ内でfind()メソッドを使い、配列の各要素(各行)に対してマッチングを実行します。
- reset()メソッドを使って、マッチャーの入力を配列の次の要素に切り替えます。
サンプルコード
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchingText{
public static void main(String[] args) {
String input = "sample text line 1 \n line2 353 35 63 \n line 3 53 35";
String regex = "\\d";
String[] strArray = input.split("\r?\n");
// Patternオブジェクトの生成
Pattern pattern = Pattern.compile(regex);
// コンパイルしたパターンで文字列を照合
Matcher matcher = pattern.matcher(input);
for (int i = 0; i < strArray.length; i++) {
matcher.reset(strArray[i]);
System.out.println("Line:: "+(i+1));
while (matcher.find()) {
System.out.print(matcher.group()+" ");
}
System.out.println();
}
}
}実行結果
Line:: 1 1 Line:: 2 2 3 5 3 3 5 6 3 Line:: 3 3 5 3 3 5
コードのポイント
このプログラムでは、正規表現「\d」(1桁の数字)を使って、各行から数字をすべて抽出しています。split("\r?\n")により、Windows形式(\r\n)とUnix形式(\n)のどちらの改行コードにも対応できる点が実用的です。
また、matcher.reset(文字列)を呼び出すことで、新しいMatcherオブジェクトを生成せずに入力文字列だけを差し替えられるため、ループ処理の中でも効率的に動作します。find()はマッチが見つかるたびにtrueを返し、group()で実際にマッチした部分文字列を取得できます。
-
Javaの正規表現におけるサブ式(グループ化)の使い方
Javaの正規表現において、サブ式(メタ文字)( )は、複数の正規表現をひとつのグループにまとめ、マッチしたテキストを記憶する働きを持ちます。グループ化を活用すると、選択(|)の適用範囲を限定したり、マッチした一部分の文字列を後から取り出したりできるようになります。 例1:基本的なグループ化 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String args[]) { String input =
-
Javaの正規表現で文字列から数値を抽出する方法
Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp