【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
原文地址:https://www.cnblogs.com/heyang78/p/15738000.html