java 通过正则表达式替换字符串中部分内容

最近开发遇到个需求,需要使用正则来替换字符串中间的一部分内容,也是面向百度探索了一番,之前还没怎么在实际中用过正则_,这里记录一下。

话不多说,直接上代码(解释在后面):

public static void main(String[] args){
	String te = "{replacecontent}";  //字符串替换的内容
    String reg = "p=(.*?)&tr";       //替换内容所对应的正则
    String content="https://0.0.0.0:8080/abc-test-reg/test/index?p=0123456&trigger=2&param=0d243b2-cd56-11e-abu9-05692e327ff";      //要替换的字符串
    StringBuilder operatorStr=new StringBuilder(content);
    Pattern p = Pattern.compile(reg);
    Matcher m = p.matcher(operatorStr);
    if (m.find()){
        //使用分组进行替换
        operatorStr.replace(m.start(1),m.end(1),te);
    }
    System.out.println(operatorStr.toString());
}

打印的内容:
在这里插入图片描述

  • 解释一下:
    其实就做了这么一件事情:
    在这里插入图片描述
    将上图内容中框起来的部分替换成下图:
    在这里插入图片描述

主要原理就是,通过正则表达式在字符串中匹配到了那一部分内容p=+任意字符+&tr,然后那一部分内容中我想要的进行分组也就是p=和&tr中间的那一部分,之后将分组的起始位置坐标,和终止位置坐标拿出来,对字符串的这部分进行替换。

拓展:

Pattern介绍

正则表达式的编译表示。
必须首先将正则表达式(指定为字符串)编译为此类的实例。 然后将所得的图案可以被用来创建一个Matcher对象可以匹配任意character sequences针对正则表达式。
执行匹配的所有状态都驻留在匹配器中,所以许多匹配者可以共享相同的模式。

	所有方法:  
	    Predicate<String> asPredicate()                          创建可用于匹配字符串的谓词。  
	    static Pattern compile(String regex)                     将给定的正则表达式编译为模式。  
	    static Pattern compile(String regex, int flags)          将给定的正则表达式编译为带有给定标志的模式。  
	    int flags()                                              返回此模式的匹配标志。  
	    Matcher matcher(CharSequence input)                      创建一个匹配器,匹配给定的输入与此模式。  
	    static boolean matches(String regex, CharSequence input) 编译给定的正则表达式,并尝试匹配给定的输入。  
	    String pattern()                                         返回编译此模式的正则表达式。  
	    static String quote(String s)                            返回指定的 String的文字模式 String 。  
	    String[] split(CharSequence input)                       将给定的输入序列分成这个模式的匹配。  
	    String[] split(CharSequence input, int limit)            将给定的输入序列分成这个模式的匹配。  
	    Stream<String> splitAsStream(CharSequence input)         根据给定的输入序列创建一个流,该流与该模式匹配。  
	    String toString()                                        返回此模式的字符串表示形式。  
Matcher介绍

将内容与正则表达式进行匹配

	所有方法:
		Matcher appendReplacement(StringBuffer sb, String replacement)       实施非终端附加和替换步骤。  
		StringBuffer appendTail(StringBuffer sb)                             实施终端附加和替换步骤。  
		int end()                                                            返回最后一个字符匹配后的偏移量。  
		int end(int group)                                                   返回在上次匹配操作期间由给定组捕获的子序列的最后一个字符之后的偏移量。  
		int end(String name)                                                 返回给定捕获子序列的最后一个字符之后的偏移量 named-capturing group以前的匹配操作期间。  
		boolean find()                                                       尝试找到匹配模式的输入序列的下一个子序列。  
		boolean find(int start)                                              重新设置该匹配器,然后尝试从指定的索引开始找到匹配模式的输入序列的下一个子序列。  
		String group()                                                       返回与上一个匹配匹配的输入子序列。  
		String group(int group)                                              返回在上一次匹配操作期间由给定组捕获的输入子序列。  
		String group(String name)                                            返回给定捕获的输入子序列 named-capturing group以前的匹配操作期间。  
		int groupCount()                                                     返回此匹配器模式中捕获组的数量。  
		boolean hasAnchoringBounds()                                         查询该匹配器的区域边界的锚定。  
		boolean hasTransparentBounds()                                       查询此匹配器的区域边界的透明度。  
		boolean hitEnd()                                                     如果在匹配器执行的最后一次匹配操作中输入的结尾被搜索引擎命中,则返回true。  
		boolean lookingAt()                                                  尝试将输入序列从区域开头开始与模式相匹配。  
		boolean matches()                                                    尝试将整个区域与模式进行匹配。  
		Pattern pattern()                                                    返回该匹配器解释的模式。  
		static String quoteReplacement(String s)                             返回一个文字替换 String为指定的 String 。  
		Matcher region(int start, int end)                                   设置该匹配器区域的限制。  
		int regionEnd()                                                      报告该匹配器区域的最终索引(排他)。  
		int regionStart()                                                    报告该匹配器区域的开始索引。  
		String replaceAll(String replacement)                                将与模式匹配的输入序列的每个子序列替换为给定的替换字符串。  
		String replaceFirst(String replacement)                              将与模式匹配的输入序列的第一个子序列替换为给定的替换字符串。  
		boolean requireEnd()                                                 如果更多输入可以将正匹配更改为否定,则返回true。  
		Matcher reset()                                                      重设此匹配器。  
		Matcher reset(CharSequence input)                                    使用新的输入序列重置此匹配器。  
		int start()                                                          返回上一个匹配的起始索引。  
		int start(int group)                                                 返回给定组在上一个匹配操作期间捕获的子序列的开始索引。  
		int start(String name)                                               返回给定捕获的子序列的初始索引 named-capturing group以前的匹配操作期间。  
		MatchResult toMatchResult()                                          返回此匹配器的匹配状态为MatchResult 。  
		String toString()                                                    返回此匹配器的字符串表示形式。  
		Matcher useAnchoringBounds(boolean b)                                设置该匹配器的区域边界的锚定。  
		Matcher usePattern(Pattern newPattern)                               更改,这 Matcher用于查找与匹配的 Pattern。  
		Matcher useTransparentBounds(boolean b)                              设置此匹配器的区域边界的透明度。  

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值