分组、捕获、反向引用和String 类中使用正则表

举报
周小末天天开心 发表于 2022/12/31 22:41:44 2022/12/31
【摘要】 分组、捕获、反向引用介绍分组:可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可以看做是一个子表达式/一个分组。捕获:把正则表达式中子表达式/分组匹配的内容,保存到内容中以数字编号或者显示命名的组里,方便后面引用,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。组0代表的是整个正则表达式。反向引用:圆括号的内容被捕获后,可以在这个括号后被使用...

分组、捕获、反向引用

介绍

分组:

可以用圆括号组成一个比较复杂的匹配模式,那么一个圆括号的部分我们可以看做是一个子表达式/一个分组。

捕获:

把正则表达式中子表达式/分组匹配的内容,保存到内容中以数字编号或者显示命名的组里,方便后面引用,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。组0代表的是整个正则表达式。

反向引用:

圆括号的内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这个称为反向引用,这种引用既可以是在正则表达式内部,也可以是在正则表达式外部,内部反向引用\分组号,外部反向引用$分组号。

案例

把 类似 : "我....我要....学学学学....编程 java!";

通过正则表达式 修改成 "我要学编程 java"


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

public class RegExp13 {
    public static void main(String[] args) {
        String content = "我....我要....学学学学....编程 java!";
        
        //1. 去掉所有的. Pattern pattern = Pattern.compile("\\.");
        Matcher matcher = pattern.matcher(content);
        content = matcher.replaceAll("");
        // System.out.println("content=" + content);
        
        //2. 去掉重复的字 我我要学学学学编程 java!
        //(1) 使用 (.)\\1+
        //(2) 使用 反向引用$1 来替换匹配到的内容
        // 注意:因为正则表达式变化,所以需要重置 matcher
        // pattern = Pattern.compile("(.)\\1+");//分组的捕获内容记录到$1
        // matcher = pattern.matcher(content);
        // while (matcher.find()) {
            // System.out.println("找到=" + matcher.group(0));
        // }
        //
        // //使用 反向引用$1 来替换匹配到的内容
        // content = matcher.replaceAll("$1");
        // System.out.println("content=" + content);
        
        //3. 使用一条语句 去掉重复的字 我我要学学学学编程 java!
        content = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
        System.out.println("content=" + content);
    }
}

String 类中使用正则表

替换功能

String 类 public String replaceAll(String regex,String replacement)

判断功能

String 类 public boolean matches(String regex){} //使用 Pattern 和 Matcher 类

分割功能

String 类 public String[] split(String regex

案例


public class StringReg {
    public static void main(String[] args) {
         String content = "2000 年 5 月,JDK1.3、JDK1.4 和 J2SE1.3 相继发布,几周后其" +
        "获得了 Apple 公司 Mac OS X 的工业标准的支持。2001 年 9 月 24 日,J2EE1.3 发" +
        "布。" +"2002 年 2 月 26 日,J2SE1.4 发布。自此 Java 的计算能力有了大幅提升";
        //使用正则表达式方式,将 JDK1.3 和 JDK1.4 替换成 JDK
        content = content.replaceAll("JDK1\\.3|JDK1\\.4", "JDK");
        System.out.println(content);
        
        //要求 验证一个 手机号, 要求必须是以 138 139 开头的
        content = "13888889999";
        
        if (content.matches("1(38|39)\\d{8}")) {
            System.out.println("验证成功");
        } else {
            System.out.println("验证失败");
        }
        
        //要求按照 # 或者 - 或者 ~ 或者 数字 来分割
        System.out.println("===================");
        content = "hello#abc-jack12smith~北京";
        String[] split = content.split("#|-|~|\\d+");
        
        for (String s : split) {
            System.out.println(s);
        }
    }
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。