Java基础|正则表达式

本文详述Java中正则表达式的基础知识,包括匹配规则、分组、非贪婪匹配及搜索替换等应用场景,帮助读者掌握正则表达式在Java中的使用技巧。
摘要由CSDN通过智能技术生成

本文从正则表达式的基本概念,匹配规则,复杂匹配,分组匹配,非贪婪匹配及具体应用方面进行介绍。

正则表达式简介

  1. 正则表达式可以用字符串来描述规则,并用来匹配字符串。
  2. 在其他语言中,\\表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。 在 Java 中,\\表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。 所以,在其他的语言中(如Perl),一个反斜杠 \就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个\\代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是\\d,而表示一个普通的反斜杠是\\\\
public class RegexDemo {
   
    public static void main(String[] args) {
   
        // \d表示任意一个数字
        String regex = "20\\d\\d";
        System.out.println("2019".matches(regex)); // true
        System.out.println("2100".matches(regex)); //false
    }

    //判断手机号是否为11位
    public static boolean isValidMobileNumber(String s) {
   
        return s.matches("\\d{11}");
    }
}

匹配规则

  1. 精准匹配

对于正则表达式abc来说,它只能精确地匹配字符串"abc",不能匹配"ab""Abc""abcd"等其他任何字符串。

  1. 匹配任意字符

精确匹配实际上用处不大,因为我们直接用String.equals()就可以做到。大多数情况下,我们想要的匹配规则更多的是模糊匹配。我们可以用.匹配一个任意字符。

  1. 匹配数字

如果我们只想匹配0~9这样的数字,可以用\d匹配,仅限单个数字字符。例如,正则表达式00\d可以匹配:

  1. 匹配常用字符

\w可以匹配一个字母、数字或下划线,w的意思是word。

  1. 匹配空格字符

\s可以匹配一个空格字符,注意空格字符不但包括空格,还包括tab字符(在Java中用\t表示)。

  1. 匹配非数字

\d可以匹配一个数字,而\D则匹配一个非数字。
类似的,\W可以匹配\w不能匹配的字符,\S可以匹配\s不能匹配的字符,这几个正好是反着来的。

  1. 重复匹配
  • 修饰符*可以匹配任意个字符,包括0个字符
  • 修饰符+可以匹配至少一个字符
  • 修饰符?可以匹配0个或一个字符
  • 修饰符{n}可以精确指定n个字符
  • 修饰符{n,m}可以指定匹配n~m个字符
  • 修饰符{n,}就可以匹配至少n个字符
public static void main(String[] args) {
   

    //精准匹配
    System.out.println("精准匹配:");
    String re1 = "abc";
    System.out.println("abc".matches(re1));
    System.out.println("Abc".matches(re1));
    System.out.println("abcd".matches(re1));

    String re2 = "a\\&c"; // 对应的正则是a\&c
    System.out.println("a&c".matches(re2)); //true
    System.out.println("a-c".matches(re2));
    System.out.println("a&&c".matches(re2));

    //匹配任意字符
    System.out.println("匹配任意字符:");
    String re3 = "a.c";
    System.out.println("abc".matches(re3)); //true
    System.out.println("a&c".matches(re3)); //true
    System.out.println("ac".matches(re3)); //false
    System.out.println("abcc".matches(re3)); //false

    //匹配数字
    System.out.println("匹配数字:");
    String re4 = "00\\d";
    System.out.println("005".matches(re4));//true
    System.out.println("00A".matches(re4));//false
    System.out.println("0088".matches
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦晨涌京

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值