Java中正则表达式(完整详解,附有案例+代码)

三十三.正则表达式

33.1 概述

字符类

[abc]a、b 或 c(简单类)
[^abc]任何字符,除了 a、b 或 c(否定)
[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-z&&[def]]d、e 或 f(交集)
[a-d[m-p]]a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[^bc]]a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]a 到 z,而非 m 到 p:[a-lq-z](减去)

预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

public class Test01 {
    public static void main(String[] args) {
//public boolean matches(String regex):判断是否与正则表达式匹配,匹配返回true
      
        // 只能是a b c
        System.out.println("-----------1-------------");
        System.out.println("a".matches("[abc]")); // true
        System.out.println("z".matches("[abc]")); // false

        // 不能出现a b c
        System.out.println("-----------2-------------");
        System.out.println("a".matches("[^abc]")); // false
        System.out.println("z".matches("[^abc]")); // true
        System.out.println("zz".matches("[^abc]")); //false
     System.out.println("zz".matches("[^abc][^abc]"));//true

        // a到zA到Z(包括头尾的范围)
        System.out.println("-----------3-------------");
        System.out.println("a".matches("[a-zA-z]")); // true
        System.out.println("z".matches("[a-zA-z]")); // true
        System.out.println("aa".matches("[a-zA-z]"));//false
        System.out.println("zz".matches("[a-zA-Z]"));//false
      
System.out.println("zz".matches("[a-zA-Z][a-zA-Z]")); //true
      
       System.out.println("0".matches("[a-zA-Z]"));//false
       System.out.println("0".matches("[a-zA-Z0-9]"));//true


        // [a-d[m-p]] a到d,或m到p
      System.out.println("-----------4-------------");
      System.out.println("a".matches("[a-d[m-p]]"));//true
      System.out.println("d".matches("[a-d[m-p]]")); //true
      System.out.println("m".matches("[a-d[m-p]]")); //true
      System.out.println("p".matches("[a-d[m-p]]")); //true
      System.out.println("e".matches("[a-d[m-p]]")); //false
      System.out.println("0".matches("[a-d[m-p]]")); //false

        // [a-z&&[def]] a-z和def的交集。为:d,e,f
    System.out.println("----------5------------");
    System.out.println("a".matches("[a-z&&[def]]")); //false
    System.out.println("d".matches("[a-z&&[def]]")); //true
    System.out.println("0".matches("[a-z&&[def]]")); //false

        // [a-z&&[^bc]] a-z和非bc的交集。(等同于[ad-z])
   System.out.println("-----------6------------_");
   System.out.println("a".matches("[a-z&&[^bc]]"));//true
   System.out.println("b".matches("[a-z&&[^bc]]")); //false
   System.out.println("0".matches("[a-z&&[^bc]]")); //false

        // [a-z&&[^m-p]] a到z和除了m到p的交集。(等同于[a-1q-z])
   System.out.println("-----------7-------------");
   System.out.println("a".matches("[a-z&&[^m-p]]")); //true
   System.out.println("m".matches("[a-z&&[^m-p]]")); //false
   System.out.println("0".matches("[a-z&&[^m-p]]")); //false
      
      
   

        //.表示任意一个字符
        System.out.println("你".matches("..")); //false
        System.out.println("你".matches(".")); //true
        System.out.println("你a".matches(".."));//true

        // \\d 表示任意的一个数字
        // \\d只能是任意的一位数字
        // 简单来记:两个\表示一个\
        System.out.println("a".matches("\\d")); // false
        System.out.println("3".matches("\\d")); // true
        System.out.println("333".matches("\\d")); // false

        //\\w只能是一位单词字符[a-zA-Z_0-9]
        System.out.println("z".matches("\\w")); // true
        System.out.println("2".matches("\\w")); // true
        System.out.println("21".matches("\\w")); // false
        System.out.println("你".matches("\\w"));//false

        // 非单词字符
        System.out.println("你".matches("\\W")); // true
        System.out.println("-------------------------");
        // 以上正则匹配只能校验单个字符。


        // 必须是数字 字母 下划线 至少 6位
        System.out.println("2442fsfsf".matches("\\w{6,}"));//true
 System.out.println("244f".matches("\\w{6,}"));//false

        // 必须是数字和字符 必须是4位
System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("23 F".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("23dF".matches("[\\w&&[^_]]{4}"));//true
System.out.println("23_F".matches("[\\w&&[^_]]{4}"));//false
      
      
       System.out.println();
     String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
     String regex5 = "([01]\\d|2[0-3])(:[0-5]\\d){2}";
     System.out.println("23:11:11".matches(regex5));
    }
}

33.2 Test

public class Test02 {
    public static void main(String[] args) {

        // 手机号码
        String regex1 = "1[3-9]\\d{9}";
        System.out.println("13112345678".matches(regex1));//true
 System.out.println("13712345667".matches(regex1));//true
 System.out.println("13945679027".matches(regex1));//true
 System.out.println("139456790271".matches(regex1));//false

        // 座机电话号码
        //020-2324242 02122442 027-42424 0712-3242434
        //一:区号@\\d{2,3}
        //      0:表示区号一定是以0开头的
    //\\d{2,3}:表示区号从第二位开始可以是任意的数字,可以出现2到3次。
        //二:- ?表示次数,日次或一次
        //三:号码的第一位不能以0开头,从第二位开始可以是任意的数字,号码的总长度:5-10位
        String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("020-2324242".matches(regex2));
        System.out.println("02122442".matches(regex2));
        System.out.println("027-42424".matches(regex2));
        System.out.println("0712-3242434".matches(regex2));


        //邮箱号码
        //3232323@qq.com zhangsan@itcast.cnn dlei0009@163.com dlei0009@pci.com.cn
        //思路:
        //在书写邮箱号码正则的时候需要把正确的数据分为三部分
        //第一部分:@的左边 \\w+
        //      任意的字母数字下划线,至少出现一次就可以了
        //第二部分:@ 只能出现一次
        //第三部分:
        //   3.1 .的左边[\\w&&[^_]]{2,6}
        //       任意的字母加数字,总共出现2-6次(此时不能出现下划线)
        //  3.2       . \\.
        // 3.3大写字母,小写字母都可以,只能出现2-3次[a-zA-Z]{2,3}
        //  我们可以把3.2和3.3看成一组,这一组可以出现1次或者两次
        String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
        System.out.println("3232323@qq.com".matches(regex3));      System.out.println("zhangsan@itcast.cnn".matches(regex3));  System.out.println("dlei0009@163.com".matches(regex3));
 System.out.println("dlei0009@pci.com.cn".matches(regex3));


        System.out.println();
       String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
        String regex5 = "([01]\\d|2[0-3])(:[0-5]\\d){2}";
        System.out.println("23:11:11".matches(regex5));

        System.out.println("身份验证");
        // 身份证
        //身份证号码的简单校验:
        //18位,前17位任意数字.开头不能是0,最后一位可以是数字可以是大写或小写的x
        String regex6 = "[1-9]\\d{16}(\\d|X|x)";
        String regex7 = "[1-9]\\d{16}[\\dXx]";
        String regex8 = "[1-9]\\d{16}(\\d|(?i)x)";

        System.out.println("41080119930228457x".matches(regex8));
 System.out.println("510801197609022309".matches(regex8));
 System.out.println("15040119810705387X".matches(regex8));
 System.out.println("130133197204039024".matches(regex8));
 System.out.println("430102197606046442".matches(regex8));

        System.out.println("身份证号码的严格校验");
        //身份证号码的严格校验
        //410801 1993 02 28 457x
        //前面6位:省份,市区,派出所等信息,第一位不能是0,后面5位是任意数字 [1-9]\\d{5}
        //年的前半段: 18 19 20   [18|19|20]
        //年的后半段: 任意数字出现两次 \\d{2}
        //月份: 01~ 09 10 11 12     (0[1-9]|1[0-2])
    //日期: 01~09 10~19 20~29 30 31   (0[1-9]|[12]\\d|3[01])
        //后面四位: 任意数字出现3次 最后一位可以是数字也可以是大写x或者小写x  (\\d{3}[\\dXx])

        String regex9 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]";
        System.out.println("41080119930228457x".matches(regex9));
 System.out.println("510801197609022309".matches(regex9));
 System.out.println("15040119810705387X".matches(regex9));
 System.out.println("130133197204039024".matches(regex9));

    }
}
Java正则表达式是一种强大的工具,用于匹配和操作字符串。Java提供了java.util.regex包来支持正则表达式的使用。 正则表达式由一系列字符组成,用于描述字符串的模式。在Java,可以使用正则表达式进行以下操作: 1. 匹配:使用`matches()`方法可以判断一个字符串是否与指定的正则表达式匹配。例如,`str.matches("abc")`可以判断字符串`str`是否与模式"abc"匹配。 2. 查找:使用`Pattern`和`Matcher`类可以在字符串查找与正则表达式匹配的子串。首先,使用`Pattern.compile()`方法编译正则表达式,然后使用`Matcher`类的`find()`方法进行查找。例如: ```java String regex = "a*b"; String input = "aabfooaabfooabfoob"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); while (matcher.find()) { System.out.println("Found: " + matcher.group()); } ``` 上述代码将输出所有与正则表达式"a*b"匹配的子串。 3. 替换:使用`replaceAll()`方法可以将字符串正则表达式匹配的部分替换为指定的字符串。例如,`str.replaceAll("a+", "b")`将字符串`str`的所有连续的字母"a"替换为"b"。 4. 分割:使用`split()`方法可以根据正则表达式将字符串分割为多个子串。例如,`str.split("\\s+")`将字符串`str`按照一个或多个空格进行分割。 5. 其他操作:Java正则表达式还支持字符类、边界匹配、量词、分组等高级特性,可以实现更复杂的匹配和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蔚一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值