Java:正则表达式讲解加举例,简洁易懂

发布时间:2024年01月18日

正则表达式定义:

由一些特定的字符组成,代表的是一个规则。

作用:1.校验数据是否合法。2.可以在一段文本中查找满足要求的内容。

先自己写一个方法去校验qq号,比较与正则表达式的区别:

正则表达式的代码暂时可以不去理解。

package com.itheima.d2_regex;
/*
* 需求:校验qq号是否正确,要求全部是数字,长度6-20之间,qq号不能以0开头。
*/
public class RegexTest1 {
    public static void main(String[] args) {
        System.out.println(checkQQ(null));//false
        System.out.println(checkQQ("12345697"));//true
        System.out.println(checkQQ("45158481d22"));//false

        System.out.println("-------------------------------------");

        System.out.println(checkQQ(null));//false
        System.out.println(checkQQ("12345697"));//true
        System.out.println(checkQQ("45158481d22"));//false
    }
    //正则表达式校验  暂时可以不用理解其中的代码   明显正则表达式更简洁
    public static boolean checkQQ1(String qq){
        return qq != null && qq.matches("[1-9]\\d{5,19}");
    }
    //自己写方法去判断
    public static boolean checkQQ(String qq){
        //判断qq号码是否为null,长度符合要求,是否为以0开头。
        if (qq == null || qq.startsWith("0") || qq.length() < 6 || qq.length() > 20){
            return false;
        }
        
        //判断qq号中全是数字
        for (int i = 0; i < qq.length(); i++) {
           char ch = qq.charAt(i);//根据索引提取字符(charAt())
           if (ch < '0' || ch > '9'){
               return false;
           }
        }
        return true;
    }
}

明显正则表达式更简洁更好用。

正则表达式深度解析:

String类提供了一个匹配正则表达式的方法:

public boolean matches(String regex) //判断字符串是否匹配正则表达式

讲解加举例全在里面:

package com.itheima.d2_regex;

public class RegexTest2 {
    public static void main(String[] args) {
        //1.字符类(只能匹配单个字符)  [abc]  3选1  [^abc] 不能是abc其一  [a-zA-Z] 只能是a-z A-Z 之间的字符
        //[a-z&&[^bc]] a到z,除了bc
        //举例:
        System.out.println("b".matches("[a-zA-Z]"));//true

        //2.预定义字符(只能匹配单个字符) . \d \D \s \S \w \W   大写跟小写的区别:取反
        // . 匹配任意字符  \d 0-9  \s 代表一个空白字符  \w 代表[a-zA-Z_0-9],包含大小写,下划线,0-9之间的数字。
        //举例:
        //在Java中,\是有特殊用途的,例如特殊字符:\n  \t ,这是把\n \t当成整体一个字符看
        System.out.println("1".matches("\\d"));//这里我们希望\就是\,而不是整体\d,就需要转义字符\ 转义单个反斜杠
        //这里如果你用\d,会解析成整体,但是没有\d的具体意义,所以要用(第一个反斜杠)\把(第二个反斜杠) \  转义,这样\d就不会当成整体了。
        //输出true

        //3.数量词: ? 代表0次或者一次  * 代表0次或者多次  + 代表 1次或者多次  {n} 代表正好n次  {n,} 代表>=n次 {n,m} 代表>=n,<=m次
        //举例:
        System.out.println("abc232d".matches("\\w{3,9}"));//true

        //4.其他几个常用的符号:(?i)忽略大小写,固定写法  或:|  分组:()
        System.out.println("ABC".matches("(?i)abc"));//true
        System.out.println("Abc".matches("a((?i)b)c"));//false  这个忽略大小写只针对于b而言,注意看范围即可。

        //需求:必须是“我爱”开头,中间至少有一个“编程”,最后至少一个“666”
        System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+"));//true  至少有一次(666)+,加号代表1次或者多次
        System.out.println("我爱编程编程6666666".matches("我爱(编程)+(666)+"));//false 这里666要成对出现,格式不对,所以false
    }
}

文章来源:https://blog.csdn.net/m0_74098386/article/details/135645676
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。