java正則はすべての{}にマッチし、すべての該当する文字列を取り出します。

1674 ワード

***テストデモ        git倉庫: https://github.com/alwaysInRoad/test-regex-demo
                            csdnダウンロードアドレス: https://download.csdn.net/download/weixin_40841731/10708981
説明:
       開発中に実際のプロジェクトで使用したシーン:カスタマイズしたsql内で定義された仕様パラメータを置換します。sqlの中に菗{id}が含まれているというように、私たちは菵{id}を生成のidに置き換えます。
 
主要コード:文字列のすべてを  #E{xxxxx}が入れ替わる
public static void main(String[] args){
	String sqlFragment = "insert into t_role(role_id,role_name,"
	+ "role_level,org_id,role_type,role_status,add_user_id,"
	+ "add_time,upd_user_id,upd_time) values(#{id},"
	+ "${role_name},${role_level},${org_id},${role_type},"
	+ "${role_status},"
	+ "#E{accId},#{dateInt},#{accId},#E{dateInt})";
	Pattern pattern = Pattern.compile("#E\\{[\\w]*\\}");
	Matcher matcher = pattern.matcher(sqlFragment);
	//  ,           ,      
	while(matcher.find()){
		//           
		String e = matcher.group();
		//         
		String substring = e.substring(3, e.length()-1);
		//     
		CharSequence subSequence = sqlFragment.subSequence(matcher.start(0), matcher.end(0));
		System.out.println("    :"+matcher.start(0)+"     :"+matcher.end(0));
		System.out.println(subSequence.toString());
		System.out.println(e);
		//    
		sqlFragment = sqlFragment.replaceAll("\\#E\\{"+substring+"\\}", "123123498496416");
		//             
//			sqlFragment = sqlFragment.replace(e, "123123");
		
	}
	System.out.println(sqlFragment);
}
結語:本人がすべての文章を志して書いたのは分かりやすく、問題点を突いています。もちろんです。簡単であると同時に多くの詳細と詳細を見落としてしまうかもしれません。足りないところがあれば、ご了承ください。  文章や実現技術に問題があれば、連絡してください。     メールボックス:[email protected]