爬虫(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());
        }

    }
}
相关推荐
DFT计算杂谈4 分钟前
FeSe超薄膜在CaF2衬底上的电子结构DFT研究
java·服务器·前端
circuitsosk7 分钟前
长文本与高并发下的Token“瘦身”策略:Prompt压缩与上下文窗口优化
java·前端·python·prompt·上下文窗口·token优化
岁岁养乐多9 分钟前
LangChain4j 工厂模式
java·开发语言
小小小米粒20 分钟前
idea常用搭配
java
吃饱了得干活22 分钟前
Java Map 核心原理:从数据结构到 put/get 执行,一篇彻底讲透
java·后端
晚安code23 分钟前
Java并发集合详解:从HashMap到ConcurrentHashMap
java
不才不才不不才31 分钟前
Spring 源码系列(17): HandlerMapping 与 HandlerAdapter 两大体系
java·后端·spring
lisin-lee-cooper1 小时前
JVM知识体系
java·jvm
凤山老林1 小时前
Spring Boot 大文件处理实战:分片上传、断点续传与 OSS 集成
java·spring boot·后端·大文件上传·分片上传·断点续传
敲个大西瓜1 小时前
JAVA 并发编程
java·并发编程