***测试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]