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

主に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

執筆者:

関連記事

Webアプリ用のサイトマップ生成

Googleの検索結果への表示を促進するためにGoogleに対してサイトマップを提供する必要がある。 WordPressでは様々なプラグインを使ってサイトマップを作成できるが、Webアプリの場合は独自 …

テキストファイルマスクツール

本番環境での性能検証でNGになってしまった。 どの処理でどれほどの処理時間がかかっているかを把握するためにログレベルを変更して、ログを取得した。 対応方法を自社の担当者と検討するために、本番環境からこ …

OWASPが推奨する強力なパスワード

Webアプリケーションのセキュリティの標準化や推進を行うOWASPでは、強力なパスワードの使用を推奨しているので、それをまとめた。 cheatsheetseries.owasp.orgAuthenti …

CentOS7のマルチホーム化

サイトの存在を隠しつつも、sftpサーバを公開し、後輩と1G以上のファイルのやりとりしたい。 パブリック側のIPアドレスを教えてしまうと、どこのサーバだろうかとブラウザで開いたりするとサイトの存在がわ …

EAP7のインストールとパッチ適用

仕事でredhat社のEnterprise Application Server7(EAP7)を扱うことが多いので備忘録として記載します。 なお、このサイトでWebアプリを公開したいと考えていますが、 …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る