正则表达式匹配${key}并在Java中使用
1.正则表达式匹配${key}
\$\{([a-z]+)\} 能够匹配字符串中以${key}形式的文本(其中key为小写应为字母)
.*\$\{([a-z]+)\}.* 可以用来检测文本中是否有${key}形式的文本
解释如下:
. 匹配除换行符\n之外的任何单字符
* 匹配前面的子表达式零次或多次 要匹配*字符,请使用\*
{ 标记限定符表达式的开始。要匹配 {,请使用 \{
[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);
}
}
测试代码的运行结果如图

参考
正则表达式匹配${key}并在Java中使用的更多相关文章
- 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用
简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...
- 【java 正则表达式】记录所有在java中使用正则表达式的情况
本篇记录在java中邂逅正则表达式的所有美丽瞬间.因为在java和js中正则表达式的语法并不一致. 1.匹配字符串中有出现[2.1开头或者&2.1或者&3.1等的] Pattern m ...
- java中的泛型2--注意的一些问题和面试题
前言 这里总结一下泛型中需要注意的一些地方和面试题,通过面试题可以让你掌握的更清楚一些. 泛型相关问题 1.泛型类型引用传递问题 在Java中,像下面形式的引用传递是不允许的: ArrayList&l ...
- Java中正则表达式、模式匹配与信息抽取
引言 记得几年前在做网页爬虫后的信息抽取时,针对网页源码中隐藏的要提取的信息,比如评论.用户信息等属性信息,直接利用HtmlParser得到.如此做倒是简单,不过利用的是网页的规范的tag标记.其实j ...
- 9.JAVA中的正则表达式
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
- java中正则表达式基本用法
正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java中正则表达式的使用
public class Test{ public static void main(String args[]) { String str="@Shang Hai Hong Qiao Fe ...
- java中正则表达式
在<java编程思想>中,java中的 \\ 表示“我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义.”如果想插入一个普通的反斜线,那么应该使用 \\\\. 理解: 我们使用的 ...
随机推荐
- 并发编程补充--方法interrupted、isinterrupted详解
并发编程 interrupted()源码 /** * Tests whether the current thread has been interrupted. The * <i>int ...
- Pytest(16)随机执行测试用例pytest-random-order
前言 通常我们认为每个测试用例都是相互独立的,因此需要保证测试结果不依赖于测试顺序,以不同的顺序运行测试用例,可以得到相同的结果. pytest默认运行用例的顺序是按模块和用例命名的 ASCII 编码 ...
- [NC13331]城市网络
传送门 题意: 思路: 对于每组查询,我们直接从$u$往上搜到$v$,复杂度$O(nq)$,显然不可取(不过这题开始的数据很弱,暴力就过了) #include<bits/stdc++.h> ...
- BZOJ2555 SubString【SAM + Link Cut Tree】
BZOJ2555. SubString 要求在线询问一个串在原串中出现的次数,并且可以在原串末尾添加字符串 如果没有修改的话,考虑建出\(parent\)树之后统计每个\(endpos\)节点的\(r ...
- cf 1305 E. Kuroni and the Score Distribution
题目传送门:E. Kuroni and the Score Distribution 题目大意:给n和m,输出n个数,这些数里必须要有m对a[i]+a[j]==a[k] ( i < j < ...
- Codeforces Beta Round #92 (Div. 2 Only) B. Permutations
You are given n k-digit integers. You have to rearrange the digits in the integers so that the diffe ...
- Codeforces Round #531 (Div. 3) C. Doors Breaking and Repairing (博弈)
题意:有\(n\)扇门,你每次可以攻击某个门,使其hp减少\(x\)(\(\le 0\)后就不可修复了),之后警察会修复某个门,使其hp增加\(y\),问你最多可以破坏多少扇门? 题解:首先如果\(x ...
- 字典树 && 例题 Xor Sum HDU - 4825 (板子)
一.字典树描述:Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优 ...
- java实现定时任务解决方案
在线corn表达式 1. 总结常见的实现定时任务的几种方法 thread实现 [原理:通过创建一个线程,让他在while循环里面一直运行,用sleep() 方法让其休眠从而达到定时任务的效果.] Ti ...
- JSR-303 实现参数校验
参考 1. 什么是JSR-303 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hib ...