首页 > 其他分享 >使用Matcher进行正则匹配-解析模板参数

使用Matcher进行正则匹配-解析模板参数

时间:2023-10-23 14:45:56浏览次数:32  
标签:匹配 matcher 正则表达式 Pattern 正则 Matcher 文本 模板

一、介绍

Matcher是正则表达式的一部分,它用于执行正则表达式的匹配操作。Matcher通常与Pattern类一起使用,Pattern用于编译正则表达式,而Matcher用于在文本中搜索和匹配该正则表达式。

二、具体用途

1)文本匹配:可以使用 Matcher 来查找文本中是否包含与正则表达式模式匹配的子字符串。这允许您执行高级的字符串搜索和匹配操作。

2)文本替换:Matcher 还可以用于替换文本中与正则表达式匹配的部分。您可以使用MatcherreplaceAllreplaceFirst方法来替换匹配的文本。

3)文本分割:Matcher 还可以用于将文本拆分成多个部分,这些部分根据正则表达式模式的匹配来进行分割。您可以使用split方法来执行这种操作。

三、demo

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexExample {
public static void main(String[] args) {
String text = "Hello, my email is [email protected] and my phone number is 123-456-7890.";

// 定义一个正则表达式模式,用于匹配电子邮件地址
Pattern pattern = Pattern.compile("\\w+@\\w+\\.\\w+");

// 创建Matcher对象,用于在文本中查找匹配项
Matcher matcher = pattern.matcher(text);

// 查找匹配项并输出它们
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
}
result:
Found: [email protected]

四、常用写法
定义匹配规则:
private static Pattern PARAM_PATTERN = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
String content = messageTemplate.getContent();
Matcher paramMatcher = paramMatcher(content);
while (paramMatcher.find()) {
String param = paramMatcher.group(1);
if (StringUtil.isNoneBlank(param)) {
String v = params.get(param);
if (StringUtil.isNotBlank(v)) {
content = content.replace("${" + param + "}", v);
}
}
}

1.匹配 ${xxx}

正则表达式:
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}"); 或者 Pattern pattern = Pattern.compile("\\$\\{([^}]+)\\}");
2.使用matcher()方法进行匹配查找
Matcher matcher = pattern.matcher(text);
3.将结果打印
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}
public static Matcher paramMatcher(String str) {
Matcher matcher = PARAM_PATTERN.matcher(str);
return matcher;
}
demo:
String text = "Hello, ${name}my email is [email protected] and my phone number is 123-456-7890.cexample@email.${wlw}com";
Pattern pattern = Pattern.compile("\\$\\{([^}]+)\\}");
// 创建Matcher对象,用于在文本中查找匹配项
Matcher matcher = pattern.matcher(text);
// 查找匹配项并输出它们
while (matcher.find()) {
System.out.println("Found: " + matcher.group());
}

结果:
Found: ${name}
Found: ${wlw}



 

标签:匹配,matcher,正则表达式,Pattern,正则,Matcher,文本,模板
From: https://www.cnblogs.com/wlwtop/p/17782343.html

相关文章

  • 视频直播系统源码,在Laravel中自定义模板函数 并在模板中调用
    视频直播系统源码,在Laravel中自定义模板函数并在模板中调用第一步:在app/bootstrap下定义一个php文件 diy_helpers.php​内容如下: <?phpfunctioncssVersion($data){  $version="1.01";  return$data."?v=".$version;}functionjsVersion($data){  $ver......
  • P3373 【模板】线段树 2
    【模板】线段树2如题,已知一个数列,你需要进行下面三种操作:将某区间每一个数乘上\(x\);将某区间每一个数加上\(x\);求出某区间每一个数的和。输入格式第一行包含三个整数\(n,q,m\),分别表示该数列数字的个数、操作的总个数和模数。第二行包含\(n\)个用空格分隔的整数,其中第\(i\)......
  • T125847 【模板】动态开点线段树
    \(T125847\)题目背景注意:请注意时间限制是800ms请使用较快的输入输出注意:空间限制是128MB请不要开longlong时限在std的2.5倍以上题目描述有一个有\(1000000000\)个数的初始值全为\(0\)的区间,你要进行两种操作:将某区间每一个数加上 \(x\)求出某区间每一个数的和输入格式第一行包......
  • laravel:blade模板(10.27.0)
    一,相关文档:https://learnku.com/docs/laravel/10.x/blade/14852二,创建controller和view1,创建controllerliuhongdi@lhdpc:/data/laravel/dignews$phpartisanmake:controllerCommentController   INFO  Controller[app/Http/Controllers/CommentController.php......
  • KMP模板(洛谷P3375)
    1#include<bits/stdc++.h>2usingnamespacestd;3strings1,s2;4vector<int>find_next(vector<int>next,strings)5{6inti=1,prefix=0,len=s.length();7while(i<len)8{9if(s[prefix]=......
  • 程序语言基础之正则表达式的字符偶数个配置
    例题展示例题解决其中,*指的是将他前面的字符重复0次或者若干次;例如:b*可以为b,也可以为bb,bbb等;......
  • 设计模式05 —— 模板模式
    设计模式05——模板模式本教程参考:菜鸟教程-学的不仅是技术,更是梦想!(runoob.com)参考书:《图解设计模式》本系列为本人学习笔记,和课程学习笔记,资料和参考均源自互联网,希望各位大佬多多指点!介绍在模板模式(TemplatePattern)中,一个抽象类公开定义了执行它的方法的方式/模......
  • 无涯教程-AWK - 正则表达式运算符函数
    本示例说明了正则表达式运算符的两种形式。Match它表示为〜,它查找包含匹配字符串的字段,如,以下示例将打印包含模式9的行。[Learnfk]$awk'$0~9'marks.txt在执行此代码时,您将获得以下输出-2)ToolfkMaths905)NesfkHistory89不匹配它表示为!〜,它查找不包......
  • 从零用VitePress搭建博客教程(5) - 如何自定义页面模板、给页面添加独有的className和
    接上一节:从零用VitePress搭建博客教程(4)–如何自定义首页布局和主题样式修改?上一节其实我们也简单说了自定义页面模板,这一节更加详细一点说明,开始之前我们要知道在vitePress中,.md的文件是可以直接编写vue的代码的。比如我们现在来自定义一个前端网址导航页面八、自定义一些......
  • 诡异问题的背后,有可能是低级问题——过拟合原来是正则化惹的祸?
    算是编程的初学者吧,简单问题经常犯蠢,写的不对多多包涵。最近碰到的一件挺有意思的事,自己本身是干土木,目前和师兄在做一个混凝土流变和屈服的预测,用的机器学习准备发paper,快到交稿师兄自己看了下数据发现数据炸了,跟我说最好那个XGB的验证集预测结果普遍偏低,怪事。第一反应就是数......