zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    函数对象中的prototype属性
    undefined和null的区别
    访问修饰符
    继承
    静态成员和实例成员的区别
    js模拟Trim()方法
    连接池的执行原理
    Javascript中的= =(等于)与= = =(全等于)区别
    数据库中创建约束
    KM算法入门
  • 原文地址:https://www.cnblogs.com/heyang78/p/15738000.html
Copyright © 2011-2022 走看看