JavaSE——正则表达式(1/2):概述、初步使用(普通方法,正则表达式)、书写规则(字符类,预定义字符,数量词,其他,特殊案例)

目录

概述

初步使用

普通方法

正则表达式

书写规则

字符类

预定义字符

数量词

其他

特殊案例


概述

正则表达式

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

作用一:用来校验数据格式是否合法  (更简单、更便捷)

作用二:在一段文本中查找满足要求的内容

String提供的一个陪陪正则表达式的方法

public boolean matches(String regex)        判断字符串是否匹配正则表达式,匹配返回true,不匹配返回false。

初步使用

完成需求:

  • 校验QQ号码是否正确,要求全部是数字,长度是(6-20)之间,不能以0开头。

普通方法

public class InitialUseOne {
    public static void main(String[] args) {
        System.out.println(checkQQ("2668834948"));
    }
    public static boolean checkQQ(String qq){
        //1.判断QQ号码是否为null,是否以0开头,同时可以控制号码长度在6-20之间
        if(qq == null || qq.startsWith("0")|| qq.length() < 6 || qq.length() > 20){
            return false;
        }
        //2.判断是否全都是数字
        for (int i = 0; i < qq.length(); i++) {
            //根据索引提取当前位置处的字符
            char ch = qq.charAt(i);
            //判断ch存储的字符,如果不是数字,则QQ号码不合法。
            if(ch < '0' || ch > '9'){
                return false;
            }
        }
        //3.每个字符都判断完,则说明QQ号码合法
        return true;
    }
}

运行结果:

正则表达式

package user.RegularExpression;

public class InitialUseTwo {
    public static void main(String[] args) {
        System.out.println(checkQQ("2668834948"));
    }
    public static boolean checkQQ(String qq){
        return qq != null && qq.matches("[1-9]\\d{5,19}");
// [1-9]代表第一位只能是1-9的数字,\\d代表全部为数字,{5,19}表示后面的位数为5到10位
    }
}

运行结果:

书写规则

正则表达式中,一些基本符号的含义:

  • ^        :取反
  • &&     :交集,不能写单个的&
  • \         :转义字符
  • |         :写在括号外面表示并集
  • []        :里面的内容出现一次

字符类

格式含义
[abc]只能a,b,或c

[^abc]

除了a,b,c之外的任何字符
[a-zA-Z]a到z,A到Z,包括(范围)
[a-d[m-p]]a到d,或m到p
[a-z&&[def]]d,e,或f(交集)
[a-z&&[^bc]]a到z,除了b和c(等同于[ad-z])
[a-z&&[^m-p]]a到z,除了m到p(等同于[a-lq-z])

预定义字符

(只匹配单个字符)

格式含义
.任何字符(注意:\n回车符号不匹配)
\d一个数字:[0-9]
\D非数字:[0-9]
\s一个空白字符
\S非空白字符:[^\s]
\w任何单词字符:[a-zA-Z_0-9]
\W[^\w]一个非单词字符

数量词

格式含义
X?X出现一次或θ次
X*X出现零次或多次
X+X出现一次或多次
X{n}X出现正好n次
X{n, }X出现至少n次
X{n,m}X出现至少n次但不超过m次

其他

格式含义
(?i)忽略后面字符的大小写
a((?i)b)c只忽略b的大小写
()分组

特殊案例

忽略大小写:

public class Test {
    public static void main(String[] args) {
        System.out.println("abc".matches("(?i)abc"));
        //匹配结果为true

        System.out.println("ABC".matches("(?i)abc"));
        //匹配结果为true

        System.out.println("aBc".matches("a((?i)b)c"));
        //匹配结果为true

        System.out.println("ABc".matches("a((?i)b)c"));
        //匹配结果为false
    }
}

运行结果:

"或"的运用

需求:么是3个小写字母,要么是3个数字

public class Test {
    public static void main(String[] args) {
        System.out.println("123".matches("\\d{3}|[a-z]{3}"));
        //匹配结果为true

        System.out.println("abc".matches("\\d{3}|[a-z]{3}"));
        //匹配结果为true

        System.out.println("aAc".matches("\\d{3}|[a-z]{3}"));
        //匹配结果为false

        System.out.println("123abc".matches("\\d{3}|[a-z]{3}"));
        //匹配结果为false
    }
}

运行结果:

分组

需求二:必须是“我爱”开头,中间可以是至少一个“编程”,最后至少是1个“666”

public class Test {
    public static void main(String[] args) {
        System.out.println("我爱编程编程666666".matches("我爱(编程)+(666)+"));
        //匹配结果为true

        System.out.println("我爱编程编程6666666666".matches("我爱(编程)+(666)+"));
        //匹配结果为false
    }
}


END


学习自:黑马程序员——JavaSE课程

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值