zoukankan      html  css  js  c++  java
  • 正则表达式匹配${key}并在Java中使用

    1.正则表达式匹配${key}

    ${([a-z]+)} 能够匹配字符串中以${key}形式的文本(其中key为小写英文字母)

    .*${([a-z]+)}.* 可以用来检测文本中是否有${key}形式的文本

    解释如下:

    . 匹配除换行符 之外的任何单字符

    * 匹配前面的子表达式零次或多次 要匹配*字符,请使用*

    { 标记限定符表达式的开始。要匹配 {,请使用 {

    [a-z] 匹配小写字母

    +匹配前面的子表达式一次或多次。要匹配+字符,请使用+;+限定是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

    ()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ()

    下图展示了括号的选择作用

    括号的选择作用

    2.在Java中使用正则表达式匹配${key}

    这里直接贴代码了

    package test;
    
    import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
    
    import java.util.ArrayList;
    import java.util.LinkedHashSet;
    import java.util.List;
    import java.util.Set;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * @Author Song
     * @Date 2021/2/26 16:55
     * @Version 1.0
     * @Description
     */
    public class TestUtil {
        /**
         * 利用好其预编译功能,可以有效加快正则匹配速度
         */
        public static Pattern dynamic = Pattern.compile(".*\$\{([a-z]+)\}.*");
        public static Pattern dynamicLimitCount = Pattern.compile("\$\{([a-z]+)\}");
    
        /**
         * 判断内容中是否包含动态参数(${key}形式的)
         *
         * @param content 要判断的内容
         * @return
         */
        public static boolean isContainsDynamicParameter(String content) {
            return dynamic.matcher(content).matches();
        }
    
        /**
         * 按照动态内容的参数出现顺序,将参数放到List中
         *
         * @param content
         * @return
         */
        public static List<String> getKeyListByContent(String content) {
            Set<String> paramSet = new LinkedHashSet<>();
            Matcher m = dynamicLimitCount.matcher(content);
            while (m.find()) {
                paramSet.add(m.group(1));
            }
            return new ArrayList<>(paramSet);
        }
    
    
        public static void main(String[] args) {
            //测试代码
            String content = "尊敬的${name}客户您好,请于${time}前到达";
            System.out.println(isContainsDynamicParameter(content));
            List<String> keyListByContent = getKeyListByContent(content);
            System.out.println("内容中的动态参数为:");
            keyListByContent.forEach(System.out::println);
        }
    }
    

    测试代码的运行结果如图
    测试代码运行截图

    参考

    菜鸟教程-正则表达式

  • 相关阅读:
    1014 Waiting in Line (30)(30 point(s))
    1013 Battle Over Cities (25)(25 point(s))
    1012 The Best Rank (25)(25 point(s))
    1011 World Cup Betting (20)(20 point(s))
    1010 Radix (25)(25 point(s))
    1009 Product of Polynomials (25)(25 point(s))
    1008 Elevator (20)(20 point(s))
    1007 Maximum Subsequence Sum (25)(25 point(s))
    1006 Sign In and Sign Out (25)(25 point(s))
    1005 Spell It Right (20)(20 point(s))
  • 原文地址:https://www.cnblogs.com/songsongsun/p/14453265.html
Copyright © 2011-2022 走看看