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

    }
}
相关推荐
m0_748240548 分钟前
AutoSar架构学习笔记
笔记·学习·架构
努力搬砖的程序媛儿1 小时前
uniapp悬浮可拖拽按钮
java·前端·uni-app
上海拔俗网络1 小时前
“AI开放式目标检测系统:开启智能识别新时代
java·团队开发
Leaf吧1 小时前
springboot 配置多数据源以及动态切换数据源
java·数据库·spring boot·后端
java1234_小锋2 小时前
Java中如何安全地停止线程?
java·开发语言
siy23332 小时前
[c语言日寄]结构体的使用及其拓展
c语言·开发语言·笔记·学习·算法
栗子~~2 小时前
基于quartz,刷新定时器的cron表达式
java
杨过姑父2 小时前
Servlet3 简单测试
java·servlet
chengxuyuan666662 小时前
python基础语句整理
java·windows·python
一只会飞的猪_2 小时前
国密加密golang加密,java解密
java·开发语言·golang