正则表达式

一种校验字符串的规则

作用:
校验字符串是否满足规则
在一段文本中查找满足要求的内容

常见的正则表达式符号

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

    // [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

练习

验证手机号

分成三部分:

  1. 1 表示手机号码只能以1开头
  2. [3-9] 表示第二位数字必须是3-9之间的
  3. \d{9} 表示任意数字可以出现9次, 也只能出现9次
package RegexDemo;

public class RegexDemo2 {
    public static void main(String[] args) {
        // 验证手机号码
        String regex1 = "1[3-9]\\d{9}";
        System.out.println("13112345678".matches(regex1));
        System.out.println("131123_5678".matches(regex1));
        System.out.println("1311a345678".matches(regex1));
        System.out.println("131152345678".matches(regex1));
        System.out.println("03112345678".matches(regex1));
    }
}

验证邮箱

在这里插入图片描述

String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("474328774@qq.com".matches(regex3));

验证身份证

package RegexDemo;

public class RegexDemo3 {
    public static void main(String[] args) {
//        请编写正则表达式验证用户名是否满足要求。
//        要求:大小写字母,数字,下划线一共4-16位
        String regex1 = "\\w{4,16}";

//        请编写正则表达式验证身份证号码是否满足要求。
//        简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的X
//        复杂要求:按照身份证号码的格式严格要求
        String regex2 = "[1-9]\\d{16}(0-9|X|x)";
        String regex3 = "[1-9]\\d{16}[\\dXx]";
        String regex7 = "[1-9]\\d{16}(\\d|(?i)x";
        // regex2 和regex3 和 regex7等价

        System.out.println("76104310000564371x".matches(regex2));

        // 忽略大小写的书写方式
        // 在匹配的时候忽略abc的大小写
        String regex4 = "(?i)abc";
        // 之忽略bc的大小写
        String regex5 = "a(?i)bc";
//      只忽略b的大小写
        String regex6 = "a((?i)b)c";
        System.out.println("abc".matches(regex6));
        System.out.println("aBc".matches(regex6));


        // 复杂
        String IDCardRegex = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|10|11|12)(0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]";
        
    }
}

爬虫
Pattern: 表示正则表达式

Matcher: 文本匹配器, 作用: 按照正则表达式的规则去读取字串, 从头开始读取

package RegexDemo1;

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

public class RegexTest {
    public static void main(String[] args) {
        // 要求找出里面所有的JAVAXX
        String str = "Java自从95年问世以来, 经历了很多版本, 目前企业中用的最多的是Java8" + 
                "和Java11, 因为这两个是长期支持版本, 下一个长期支持版本是Java17, 相信在未来不久Java17也会登上历史舞台";
        
        // 获取正则表达式的对象
        Pattern p = Pattern.compile("Java\\d{0,2}");
        // 获取文本匹配器的对象
        // m: 文本匹配器的对象
        // str: 大串
        // p: 规则
        // 理解为: m要在str中找符合p规则的小串
        Matcher m = p.matcher(str);
        
        // 拿着文本匹配器从头开始读取, 寻找是否有满足规则的子串
        // 如果没有, 方法返回false
        // 如果有, 返回true, 在底层记录字串的起始索引和结束索引+1
        // 0, 4

        boolean b = m.find();
        System.out.println(b); // true
        // 方法底层会根据find方法记录的索引进行字符串的截取
        // subString(start, end) 包头不包围
        // (0, 4) 但是不包括4索引
        // 会把街区的小串进行返回
        String s1 = m.group();
        System.out.println(s1);

        // 第二次调用find的时候, 会继续读取后面的内容
        // 重复返回
        while(m.find()){
            s1 = m.group();
            System.out.println(s1);
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值