【Java/Regexp】如何把MyBatis中的占位符#{name} 或是拼接符${name}中的变量名称拿出来

【程序】

复制代码
package test;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test4 {
    public static void main(String[] args) {
        String[] arr= {"#{1A}","${b1}","${1}","${222}","${A_A}","${name}","${1_2}","hello","6397"};
        
        for(String str:arr) {
            System.out.println(getInnerText(str));
        }
    }
    
    private static String getInnerText(String text) {
        Pattern pattern = Pattern.compile("^([$]|[#])([{]([_a-zA-Z0-9]*[a-zA-Z]+[_a-zA-Z0-9]*)[}])$", Pattern.CASE_INSENSITIVE);
        
        Matcher matcher=pattern.matcher(text);
        while(matcher.find()) {
            return matcher.group(3);
        }
        
        return text;
    }
}
复制代码

输出:

复制代码

1A
b1
1{222}
A_A
name
${1_2}
hello
6397

复制代码

【正则式分析】

^([]|[#])([{]([_a-zA-Z0-9]*[a-zA-Z]+[_a-zA-Z0-9]*)[}])

^....$ : 从头到尾

([]|[#]) :开头是或#

[{]:接着是一个{

[_a-zA-Z0-9]*[a-zA-Z]+[_a-zA-Z0-9]*:下划线字母数字随意,但一定要有一个字母,否则构不成变量。

[}]:再接着一个}

matcher.group(3):第三个成对的括号部分

END

 

posted @   逆火狂飙  阅读(316)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2019-12-27 一个极简Jsp工程下载
2019-12-27 【Java】一句话获得你的IP地址
2019-12-27 [Failed]Tomcat cluster方案共享session配置出错,sigh....
2019-12-27 仅显示sessionid,servername,serverport的一个springboot小程序
2019-12-27 在Nginx里指定ip_hash的方式解决Tomcat集群session的问题
2019-12-27 三年前买的T440p目前淘宝二手价2300左右
2017-12-27 绘制函数y=(x^2-2x+1)/(x^2+x+2)的曲线
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示