アプリ開発ときどきアウトドア

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

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}))


(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

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

執筆者:

関連記事

jQueryによるデフォルトボタンの実装

デフォルトボタンについて Webページ上でエンターキーを押した場合、そのページ上であらかじめ決められたボタンをクリックしたかのように処理を実行する仕組みがある。何らかのデータの検索を行うようなページは …

ASP.NET Core: IHttpClientFactoryの単純サンプル

IHttpClientの使い方やサンプルの記事を書きましたが、後から見るとちょっと量が多いと感じました。 とりあえず動かしてみたい、概略を知りたい、急いでいる等の人向けに、もっと単純なサンプルを用意し …

Windows10のインストール場所を選べない

DELLのノートPCであるVostro 5370を購入しました。 既定ではWindows 10 Homeがインストールされていましたが、会社用のボリュームライセンスのWindows10 Enterpr …

Webアプリテスト用のHTTPヘッダの追加

フロントに配置されたリバースプロキシサーバやロードバランサで設定されたHTTPヘッダを使用するWebアプリを開発することが多々あります。 このようなシナリオでは、設計に基づいて実装することはできますが …

ASP.NET Core: 変更ページを実行環境に反映

ASP.Net Core(3.0)の開発で、ページ(cshtml)を編集しながらページデザインを確認したい。 既定ではページを変更しても実行環境に反映れずサーバの再起動が必要となり開発効率が悪い。 サ …