爬虫(JAVA笔记第四十期)

p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解

目录

正则表达式

正则表达式可以用来校验字符串是否满足一定的规则,并用来校验数据格式的合法性;也可以在一段文本中查找满足要求的内容

单字符的正则表达式看这里

一般来说,一个正则表达式由字符类和数量词合组成

举例

java 复制代码
        String str = "123456789";
        String str1 = "1234a56789";

        System.out.println(str.matches("[1-9]\\d{5,19}"));
        System.out.println(str1.matches("[1-9]\\d{5,19}"));

输出

java 复制代码
true
false

应用场景:用来对手机号码、身份证的格式验证

比如

java 复制代码
        //表示一个首位为1,第二位为3-9,其余10位为0-9的号码
        String regex1 = "1[3-9]\\d{9}";
        System.out.println("13345678901".matches(regex1));//true
        System.out.println("1334567890112".matches(regex1));//false
        System.out.println("=============");

        //座机号码
        //020-2333242 02122224 027-34344 0721-2343423
        //核心思路:在书写座机号正则表达式的时候需要把正确的数据分为三部分
        //一:    区号:0\\d{2,3}
        //二:    -?表示"-"次数,0次或1次
        //三:    号码:号码的第一位也不能以0开头
        String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("020-2333242".matches(regex2));//true

爬虫

爬虫就是在一大段信息中获取自己想要的数据

举例

java 复制代码
package study.crawler;

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

public class Demo2 {
    public static void main(String[] args) {
        //爬取所有的"javaXX"
        String str = "java15是在java16之后出现的,所以肯定是java16功能更好。以此类推,java17功能肯定也比java16好";

        //Pattern类:表示正则表达式
        //Matcher类:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。在大串中去找符合匹配规则的字串

        //获取正则表达式的对象
        Pattern p = Pattern.compile("java\\d{0,2}");

        //获取文本匹配器的对象
        Matcher m = p.matcher(str);

        //--------------------------------------------------

        //拿着文本匹配器从头开始读取,寻找是否有满足规则的字串
        //如果没有返回false
        //如果有返回true,在底层记录字串的起始索引和结束索引+1
        boolean b = m.find();

        //方法底层会根据find方法记录的索引进行字符串的截取
        //subString(起始索引,结束索引);包头不包尾
        //返回截取到的小串
        String s1 = m.group();
        System.out.println(s1);

        //第二次调用find方法的时候,会继续读取后面的内容
        //读取到第二个,满足要求的子串时,方法会继续返回true
        //并把第二个子串的起始索引和结束索引+1进行记录
        boolean b1 = m.find();
        String s2 = m.group();
        System.out.println(s2);

        //--------------------------------------------------

        //利用循环读取
        while (m.find()) {
            System.out.println(m.group());
        }

    }
}
相关推荐
凤年徐1 小时前
【数据结构初阶】单链表
c语言·开发语言·数据结构·c++·经验分享·笔记·链表
阿阳微客3 小时前
Steam 搬砖项目深度拆解:从抵触到真香的转型之路
前端·笔记·学习·游戏
朝新_4 小时前
【多线程初阶】阻塞队列 & 生产者消费者模型
java·开发语言·javaee
立莹Sir4 小时前
Calendar类日期设置进位问题
java·开发语言
WarPigs4 小时前
Unity性能优化笔记
笔记·unity·游戏引擎
季鸢5 小时前
Java设计模式之状态模式详解
java·设计模式·状态模式
@yanyu6666 小时前
springboot实现查询学生
java·spring boot·后端
ascarl20106 小时前
准确--k8s cgroup问题排查
java·开发语言
magic 2456 小时前
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
java
爱敲代码的憨仔6 小时前
分布式协同自动化办公系统-工作流引擎-流程设计
java·flowable·oa