• 【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
  • 相关阅读:
    php socket 客户端代码
    linux crontab定时执行
    加载 pcntl 多进程
    Xdebug 配置
    Zend Debugger 配置
    windows SVN搭建
    深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
    操作系统-分段机制
    C++中的new、operator new与placement new
    线程安全的概念
  • 原文地址:https://www.cnblogs.com/heyang78/p/15738000.html
Copyright © 2020-2023  润新知