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

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

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

解释如下:

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

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

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

[a-z] 匹配小写字母

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

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

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

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

这里直接贴代码了

  1. package test;
  2. import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
  3. import java.util.ArrayList;
  4. import java.util.LinkedHashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7. import java.util.regex.Matcher;
  8. import java.util.regex.Pattern;
  9. /**
  10. * @Author Song
  11. * @Date 2021/2/26 16:55
  12. * @Version 1.0
  13. * @Description
  14. */
  15. public class TestUtil {
  16. /**
  17. * 利用好其预编译功能,可以有效加快正则匹配速度
  18. */
  19. public static Pattern dynamic = Pattern.compile(".*\\$\\{([a-z]+)\\}.*");
  20. public static Pattern dynamicLimitCount = Pattern.compile("\\$\\{([a-z]+)\\}");
  21. /**
  22. * 判断内容中是否包含动态参数(${key}形式的)
  23. *
  24. * @param content 要判断的内容
  25. * @return
  26. */
  27. public static boolean isContainsDynamicParameter(String content) {
  28. return dynamic.matcher(content).matches();
  29. }
  30. /**
  31. * 按照动态内容的参数出现顺序,将参数放到List中
  32. *
  33. * @param content
  34. * @return
  35. */
  36. public static List<String> getKeyListByContent(String content) {
  37. Set<String> paramSet = new LinkedHashSet<>();
  38. Matcher m = dynamicLimitCount.matcher(content);
  39. while (m.find()) {
  40. paramSet.add(m.group(1));
  41. }
  42. return new ArrayList<>(paramSet);
  43. }
  44. public static void main(String[] args) {
  45. //测试代码
  46. String content = "尊敬的${name}客户您好,请于${time}前到达";
  47. System.out.println(isContainsDynamicParameter(content));
  48. List<String> keyListByContent = getKeyListByContent(content);
  49. System.out.println("内容中的动态参数为:");
  50. keyListByContent.forEach(System.out::println);
  51. }
  52. }

测试代码的运行结果如图

参考

菜鸟教程-正则表达式

正则表达式匹配${key}并在Java中使用的更多相关文章

  1. 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用

    简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...

  2. 【java 正则表达式】记录所有在java中使用正则表达式的情况

    本篇记录在java中邂逅正则表达式的所有美丽瞬间.因为在java和js中正则表达式的语法并不一致. 1.匹配字符串中有出现[2.1开头或者&2.1或者&3.1等的] Pattern m ...

  3. java中的泛型2--注意的一些问题和面试题

    前言 这里总结一下泛型中需要注意的一些地方和面试题,通过面试题可以让你掌握的更清楚一些. 泛型相关问题 1.泛型类型引用传递问题 在Java中,像下面形式的引用传递是不允许的: ArrayList&l ...

  4. Java中正则表达式、模式匹配与信息抽取

    引言 记得几年前在做网页爬虫后的信息抽取时,针对网页源码中隐藏的要提取的信息,比如评论.用户信息等属性信息,直接利用HtmlParser得到.如此做倒是简单,不过利用的是网页的规范的tag标记.其实j ...

  5. 9.JAVA中的正则表达式

    一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ?          #{0,1}-?有一个-或者没有 \\           #表示一个" ...

  6. java中正则表达式基本用法

    正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...

  7. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  8. Java中正则表达式的使用

    public class Test{ public static void main(String args[]) { String str="@Shang Hai Hong Qiao Fe ...

  9. java中正则表达式

    在<java编程思想>中,java中的 \\ 表示“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义.”如果想插入一个普通的反斜线,那么应该使用 \\\\. 理解: 我们使用的 ...

随机推荐

  1. dedecms织梦搜索页错乱的解决方法

    在使用DEDE程序所架设的网站时,使用搜索结果页展示的问题上,由于font样式飘红问题,导致页面错乱,今天来解决这个问题. 织梦程序的搜索结果原理很简单,利用font加入颜色样式赋予搜索结果,所以显示 ...

  2. 通过HBase Observer同步数据到ElasticSearch

    Observer希望解决的问题 HBase是一个分布式的存储体系,数据按照RowKey分成不同的Region,再分配给RegionServer管理.但是RegionServer只承担了存储的功能,如果 ...

  3. 【uva 1610】Party Games(算法效率--构造 dfs)

    题意:有一个N个字符串(N≤1000,N为偶数)的集合,要求找一个长度最短的字符串(可不在集合内)S,使得集合中恰好一半的串小于等于S,另一半大于S.如果有多解,要求输出字典序最小的解. 解法:本来我 ...

  4. Codeforces Round #660 (Div. 2) Captain Flint and Treasure 拓扑排序(按照出度、入读两边拓扑排序)

    题目链接:Captain Flint and Treasure 题意: 一种操作为 选一个下标 使得ans+=a[i] 且 把a[b[i]]+a[i]   要求每个下标都进行一种这样的操作,问怎么样的 ...

  5. CS224--1:语言模型和词向量

    参考: https://www.cnblogs.com/pinard/p/7243513.html https://blog.csdn.net/cindy_1102/article/details/8 ...

  6. Python——Django框架——Form框架

    一.引入Form包 from django import forms 二.定义规则 class Forms_Login(forms.Form): 用户名 = forms.CharField(requi ...

  7. Leetcode(1)-两数之和

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  8. C++动态申请一维数组和二维数组

    在平时的编程过程中,我们经常会用到数组来存放数据,我们可以直接申请足够大空间的数组来保证数组访问不会越界,但是即便这样,我们依然不能保证空间分配的足够,而且非常的浪费空间.有时候我们需要根据上面得到的 ...

  9. sqll-libs(3)

    单引号测试,最外层单引号错误信息near ''1'') LIMIT 0,1' at line 1 由此我们可以确定SQL后台语句为select * from table where id =('inp ...

  10. element-ui UI 组件库剖析

    element-ui UI 组件库剖析 /* Automatically generated by './build/bin/build-entry.js' */ https://github.com ...