NDW

アプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング Java

Java正規表現によるパラメータ置換

投稿日:


mybatis-generatorが生成するクエリカスタマイズのために、生成されたクエリ上のパラメータを置換する方法を調べたので記載しておきます。

サンプルプログラム

Java言語の場合、標準ライブラリのPatternクラスで正規表現パターンを作成し、Matcherで検索や置換が行えます。該当箇所を纏めて置換する場合はMatcher#replaceAll()が手っ取り早いが、個々に条件判断して置換する場合は、Matcher#appendReplacement(), Matcher#appendTail()が便利です。

次の例では入力の文字列中の”#{xxx}”部分を”func(#{xxx})”に置き換えるサンプルです。
appendReplacement(), appendTail()の引数はStringBufferになっていますが、Java9以降ではStringBuilderが使えるそうです。

package example.regex;

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

public class RegexReplaceExample1 {

	public static void main(String[] args) {

		String instr = "insert into table1(col1, col2) values(#{abc}, #{xyz})";
		System.out.println("in : " + instr);

		Pattern p = Pattern.compile("\\#\\{(.*?)\\}");
		Matcher m = p.matcher(instr);
		StringBuffer sb = new StringBuffer(); // 置換後文字列を格納
		while (m.find()) {
			String all = m.group(0);
			String part = m.group(1);
			System.out.println("[0]=" + all + ", [1]=" + part);
			String replace = "func(" + all + ")"; // 置換の例
			m.appendReplacement(sb, replace);
		}
		m.appendTail(sb);

		System.out.println("out: " + sb.toString());
	}

}

実行結果は次の通りです。

in : insert into table1(col1, col2) values(#{abc}, #{xyz})
[0]=#{abc}, [1]=abc
[0]=#{xyz}, [1]=xyz
out: insert into table1(col1, col2) values(func(#{abc}), func(#{xyz}))






-1. システムエンジニアリング, Java

関連記事

eclipseエラー: There is ‘1’ error in ‘javaee_…

事象 eclipseのバージョンアップ後、それまでエラーなくビルドできていたfaces-config.xmlで次のエラーが発生する。 There is ‘1’ error in ‘javaee_8.x …

TeraTermを使ったSSH鍵の作成方法

WindowsでSSH接続するためのTera Termで、SSH鍵を作成する方法を説明します。 概要 Windows10(64ビット)で動作するTera Term 4.105で動作確認しました。 クラ …

システム開発でのmybatis-generatorの利用

システム開発における製造工程の前段では、開発メンバの負荷軽減や共通化のために、各テーブルに対するSELECT/INSERT/UPDATE/DELETEを容易に行うための共通クラスを準備することが望まれ …

chromeのjavascriptを一時的に無効化

Webアプリの開発やテストで、クライアント側のバリデーションを無効にしてサーバ側バリデーションの動作確認する、等のように一時的にjavascriptを無効にしたい場合があります。これを実現するための方 …

Javaによるzipファイルの安全な解凍方法

以前、業務アプリ(Java)でzipファイルの操作が必要となったため、Javaにおけるzip圧縮解凍について調査しました。また、zip4jを使った圧縮・解凍についても説明しました。 ここでは、もう少し …