java 正则匹配所有 {},并取出所有符合的字符串。

***测试demo        git仓库: https://github.com/alwaysInRoad/test-regex-demo

                            csdn下载地址: https://download.csdn.net/download/weixin_40841731/10708981

说明:

       开发过程中实际项目所用到的场景:对自定义的 sql 内定义的规范参数进行替换。如一句sql中包含 #{id},我们就把#{id}替换成生成的id。

主要代码:将字符串中的所有  #E{xxxx} 替换掉

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

结语:本人所有文章都立志写的简单易懂,戳中问题点。 当然了,简单的同时可能忽略了很多细节与详细,如有不足的地方,还请谅解并指出。  如对文章或实现技术上有问题,可联系我:qq: 1226500260     邮箱:[email protected]

猜你喜欢

转载自blog.csdn.net/weixin_40841731/article/details/82983625