精华内容
下载资源
问答
  • 主要介绍了Java中使用正则表达式实现字符串匹配字符串查找,匹配替换正则无不能做,特别是灵活的运用子串匹配,感兴趣的小伙伴们可以参考一下
  • java 正则匹配所有 {},并取出所有符合的字符串。该项目为普通java项目
  • “南风知我意,吹梦到西洲” 很多时候我们需要对文本进行替换,简单地使用replace方法就可以了。复杂的就需要使用正则java提供了正则相关的类Pattern 和... // 需要匹配字符串 String str = ""; // 预编译

    “南风知我意,吹梦到西洲”


    很多时候我们需要对文本进行替换,简单地使用replace方法就可以了。复杂的就需要使用正则;java提供了正则相关的类Pattern 和Matcher

    		// 正则表达式
    		String reg = "";
    		// 需要匹配的字符串
     		String str = "";
     		// 预编译
            Pattern patten = Pattern.compile(reg);
            // 进行匹配
            Matcher matcher = patten.matcher(str);
    		/**
    		* matcher.find()为true表示匹配到,如果匹配到多个下一次循环偏移到下一个匹配
    		* 每一次匹配可以理解为一组,从0开始
    		*/
            while (matcher.find()) { 
               // 疯狂操作
               // 利用start和end我们可以确定匹配到的字符串的位置
               // 当前匹配到的字符串的开始在原字符串的索引位置 
               matcher.start()
               // 当前匹配到的字符串的结尾在原字符串的索引位置
               matcher.end()
               // 当前匹配到的字符串
               matcher.group()
               // 替换第一次匹配的数据
               matcher.replaceFirst("");
               // 替换所有匹配的数据
               matcher.replaceAll("");
            }
    
    

    这里说几个需要注意的地方

    1. 正则需要进行预编译:
      阿里巴巴java开发手册中有提到:在使用正则表达式时,利用好其预编译功能,可以有效加快正则匹配速度。
      我们尽量不要再方法里面定义:Pattern pattern = Pattern.compile(“规则”);如果定义在方法体内每次调用都会进行编译影响方法效率。
    2. replaceFirst()和replaceAll()方法:
      这两个方法要么替换所有,要么只替换第一次限制太大了,只适用于某些特殊的场景,
    3. start(), end(),group():
      都可以传入一个int值取之前匹配的该方法内容,比如start(0)就表示第一次匹配到的字符串的开头在源字符串的位置
      group(0)比较特殊它代表整个表达式
    • 可以发现简单地替换不能满足我们的需求,正则还提供了两个替换的方法appendReplacement()和appendTail()
       String chapterContent = ""
       String line = "<br/>";
       String regx = num_zh_str;
       Pattern pattern = Pattern.compile(regx);
       Matcher matcher = pattern.matcher(chapterContent);
       StringBuffer chapterContentLine = new StringBuffer();
       while (matcher.find()){
           boolean equals = line.equals(chapterContent.indexOf(matcher.start() - line.length()));
           if (!equals){
               matcher.appendReplacement(chapterContentLine,line + matcher.group());
           }else{
               matcher.appendTail(chapterContentLine);
           }
       }
       matcher.appendTail(chapterContentLine);
       content.append(chapterName).append(chapterContentLine.toString());
    

    我的目的是在匹配的的字符串前面加一个换行符"<br/>",如果匹配字符前面已经有了换行符那就不要进行替换
    matcher.group()就是匹配到的字符串,通过appendReplacement()方法将匹配的的字符串替换后,将字符串添加到一个StringBuffer中,这里appendReplacement()方法只将匹配到的字符串添加到StringBuffer中,如果之前有匹配到的也会添加到StringBuffer中,但是没有匹配到的是不会添加到StringBuffer中的。所有我们需要在下面在调用matcher.appendTail(),以确保没有匹配到的也添加到StringBuffer中
    这样我们的目的就实现了,相比replaceXXX,appendXXX更灵活

    展开全文
  • java正则表达式替换字符串
  • 今天小编就为大家分享一篇java 正则表达式获取两个字符中间的字符串方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 近日做java项目时也有类似的字符串动态格式化的需求,因此,对照js方法的思路,实现一下java版的。主要是用String.java的replaceAll(String regex, String replacement)方法。 1.用途 当需要提前定义一个模版字符串...

    前面记录过一篇关于js格式化字符串方法博文:JavaScript格式化字符串函数封装
    近日做java项目时也有类似的字符串动态格式化的需求,因此,对照js方法的思路,实现一下java版的。主要是用String.java的replaceAll(String regex, String replacement)方法。

    1.用途

    当需要提前定义一个模版字符串时,格式化时如何能通过动态的参数填充而生成字符串。

    • 字符串模版:this is {0} template {1}, {2}
    • 需要动态填充{0} {1} {2}这些占位符。

    2.方法封装

    private String getFormatText(String str, String[] paramAry) {
            //格式化模版内容
            for (int i = 0; i < paramAry.length; i++) {
                str = str.replaceAll(String.format("\\{%d\\}", i), paramAry[i]);
            }
        return str;
    }
    

    3.使用

    • 调用与传参
    String str = "this is {0} template {1}, {2}";
    String[] paramAry = new String[]{"a", "text", "right!"};
    System.out.printf(getFormatText(str, paramAry));
    
    • 结果

    this is a template text, right!

    展开全文
  • 正则表达式异常强大,一直理解不深,用的也不深,这次项目中尝试,体会到了它的强大之处...字符串查找,匹配替换正则无不能做,特别是灵活的运用子串匹配得到的变量值$1,$2,再进行二次处理能够达到很巧妙的效果。
  • abcde 顺序可以不一样,也就是去掉重复出现的字符
  • 主要给大家介绍了关于Java使用正则表达式检索、替换String中特定字符正则表达式的一切,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 最近开发遇到个需求,需要使用正则替换字符串中间的一部分内容,也是面向百度探索了一番,之前还没怎么在实际中用过正则_,这里记录一下。

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

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

    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)                              设置此匹配器的区域边界的透明度。  
    
    
    展开全文
  • 主要介绍了Java正则表达式的匹配替换、查找和切割等操作,对于正则表达式的匹配替换大家已经不陌生了吧
  • 正则匹配两个字符之间的内容 表达式: (?<=A).*?(?=B) 匹配两个字符串A与B之间的内容,不包含A和B // 匹配规则 String reg = "(?<=A).*?(?=B)"; String temp = "aAabcBc"; Pattern pattern = Pattern....

    正则匹配两个字符之间的内容

    表达式: (?<=A).*?(?=B)

    • 匹配两个字符串A与B之间的内容,不包含A和B
    		// 匹配规则
            String reg = "(?<=A).*?(?=B)";
            String temp = "aAabcBc";
            Pattern pattern = Pattern.compile(reg);
            Matchermatcher = pattern.matcher(temp);
            if( matcher.find() ){
                System.out.println(matcher.group());
            }
           //打印内容 abc
    

    表达式: A.*?(?=B)

    • 匹配两个字符串A与B之间的内容,包含B,不包含A
    		// 匹配规则
            String reg = "A.*?(?=B)";
            String temp = "aAabcBc";
            Pattern pattern = Pattern.compile(reg);
            Matchermatcher = pattern.matcher(temp);
            if( matcher.find() ){
                System.out.println(matcher.group());
            }
           //打印内容 abcB
    

    表达式: A.*?B

    • 匹配两个字符串A与B之间的内容,包含A和B
    		// 匹配规则
            String reg = "A.*?B";
            String temp = "aAabcBc";
            Pattern pattern = Pattern.compile(reg);
            Matchermatcher = pattern.matcher(temp);
            if( matcher.find() ){
                System.out.println(matcher.group());
            }
           //打印内容 AabcB
    

    注: “ . ”表示任意字符,“ ? ”表示匹配一次或多次,“ ?<=A ” 表示以A开头,“ ?=B ”表示以B结尾

    展开全文
  • String s = "lsx[ip:192.168.19.176]的[Physical Memory]...[ip:192.168.19.158]"; String reg = "((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?... //匹配ip的正则 System.out.println(s.r
  • Java 通过正则表达式替换字符串

    万次阅读 2019-06-21 16:59:27
    依据Pattern对象做为匹配模式对字符串展开匹配检查,然后Matcher实例在给定的Pattern实例的模式控制下进行字符串匹配,在实际的开发中,为了方便我们很少直接使用Pattern类或Matcher类,而是使用String类下的...
  • 本资源文件是我自己总结的,其中包括5个类,这5个类的代码基本...用正则表达式替换字符串内容,使用正则表达式切割字符串,字符串匹配,将字符串“<msg>ha>ve modif”中的>替换为>将<替换为<将&替换为2. 等等情况!
  • 现想把一个字符串 ``` String s1 = " <span><imgwidth=39 height=17 </imgwidth=32></span>"; 或者类似: String s2 = " <span><imgwidth=39 height=17 </imgwidth=35></span>"; ``` ...
  • Java正则表达式循环匹配字符串

    千次阅读 2020-03-11 14:36:09
    // 参数:要匹配的目标字符串 Map map = new HashMap(); map.put("$user_name$","user_value"); map.put("$company_name$","company_value"); map.put("$school_name$","$school_name$"); /*int groupCount = ...
  • String x="16+(7×17)-90×23+(1÷2)... //更新Matcher对象,指向新字符串匹配  }  目的:移除字符串中的数字 输出:   好吧str.replaceAll(regex, string)方法可以直接实现。我傻了,弄复杂了
  • 许多程序设计语言都支持利用正则表达式进行字符串操作。 2.正则表达式的特点是: 1 灵活性、逻辑性和功能性非常强; 2. 可以迅速地用极简单的方式达到字符串的复杂控制。 3. 对于刚接触的人来说,比较晦涩难懂。 3....
  • 今天小编就为大家分享一篇java正则替换img标签中src值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 正则匹配的代码如下,效率极其低下,居然能够耗时3分钟。 Instant startTimeMark = Instant.now(); if (title.contains("申请医疗器械注册获受理") || title.contains("申报医疗器械注册获受理") || title....
  • 今天小编就为大家分享一篇Java替换中使用正则表达式实现中间模糊匹配的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • java 通过正则表达式获取匹配字符串的例子
  • java正则表达式及字符串处理详解本篇博文主要是对java String类涉及正则表达式方法及java.util.regex包中相关类和方法的一个总结 String类相关方法 boolean matches(String regex) 告知此字符串是否匹配给定的正则...
  • 有这样一个场景:替换sql字符串中的占位符, String sql = "select * from #{tableName}"; 。 有朋友会想直接用String.RepaceAll()替换就可以啦?但是“#{tableName}”是合法值域中的任意一个值,也就是说“#{...
  • Java 字符串 正则表达式

    千次阅读 2018-10-31 11:29:59
    字符串 String类:最常用的字符串。初始化后不可改变,String变量的重新赋值其实是重新分配内存。 StringBuffer类:多线程环境中,可变字符串类。 StringBuilder类:单线程环境中,可变字符串类。 正则表达式 ...
  • Java正则替换汉字中文字符串

    千次阅读 2017-03-14 15:19:53
    这段代码原本写在我的博客里的 但是发现这段代码在我的博客页面里神奇的凑效了 吧我博客日志里的中文显示全部替换没了。所以写在这与大家分享 public static int getLength(String str){  str = str....
  • json字符串很有用,有时候一些后台接口返回的信息是字符串格式的,可读性很差,这个时候要是有个可以格式化并高亮显示json串的方法那就好多了,下面看看一个正则表达式完成的json字符串的格式化与高亮显示 ...
  • java正则表达式 过滤特殊字符的正则表达式

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,242
精华内容 17,696
关键字:

java正则匹配文件替换字符串

java 订阅