正则表达式和爬虫

目录

一、正则表达式:

作用:

字符类(只匹配一个字符)

细节

预定义字符字符(只匹配一个字符)

细节

数量词

二、爬虫

Pattern

Matcher

要点说明


一、正则表达式:

作用:

1、校验字符串是否满足规则

2、在一段文本中查找满足要求的内容(爬虫)

|----------------------|-----------------------------------------|
| [abc] | 只能是a,b或c |
| [^abc] | 除了这三个之外的任何字符 |
| [a-zA-Z] | a-z,A-Z(字符串出现的字符只要在两个范围(包括z,Z)之内就为true) |
| [a-d[m-p]] | a-d或者m-p |
| [a-z&&[def]] | a-z和def的交集 |
| [a-z&&[^bc]] | a-z和非def的交集(即:[ad-z]) |
| [a-z&&[^m-p]] | a-z和除了m-p的交集(即:[a-[q-z]]]) |
[#### 字符类(只匹配一个字符)]

细节:如果要求两个范围的交集,那么需要写符号"&&"。如果写成一个&那么此时"&"表示的就不是交集了,而是一个简简单单的"&"符号。
System.out.println("&".matches("[a-z&&[def]]"));//false
System.out.println("&".matches("[a-z&[def]]"));//true

|-----|------------------------------|
| . | 任何字符 |
| \d | 一个数字[0-9] |
| \D | 非数字:[^0-9] |
| \s | 一个空白字符:[\t\n\x0B\f\r] |
| \S | 非空白字符 |
| \w | [a-za-Z_0-9]英文、数字、下划线 |
| \W | [^\w]一个非单词字符 |
[#### 预定义字符字符(只匹配一个字符)]

细节:在Java中"\"为转义字符,表示改变后面那个字符原本的含义。双引号""在Java中表示字符串的开头或结尾。"\""表示把"变成普普通通的"(仅仅只是一个符号,不具备任何含义)

"\\"表示把\变成普普通通的\

System.out.println("你a".matches("."));//false
System.out.println("你a".matches(".."));//true
System.out.println("你".matches("\\w"));//false
System.out.println("你".matches("\\W"));//true

|--------|---------------|
| X? | X出现一次或零次 |
| X* | X出现零次或多次 |
| X+ | X出现一次或多次 |
| X{n} | X出现正好n次 |
| X{n,} | X出现至少n次 |
| X{n,m} | X出现至少n次但不超过m次 |
[#### 数量词]

二、爬虫

Pattern:表示正则表达式

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

eg.有如下文本:Java自从95年问世,经历了很多版本,目前企业中用到的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在不久Java17也会逐渐登上历史舞台。

要求:找出里面所偶的JavaXX。

代码如下:

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

public class 爬虫demo {
    public static void main(String[] args) {
        String str = "Java自从95年问世,经历了很多版本,目前企业中用到的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在不久Java17也会逐渐登上历史舞台";
        //获取正则表达式的对象
        Pattern p = Pattern.compile("Java\\d{0,2}");
        //获取文本匹配器的对象
        Matcher m = p.matcher(str);
        //利用循环从头获取,寻找是否有满足规则的子串。
        while(m.find()){
            String s = m.group();
            System.out.println(s);
        }
    }
}

运行结果如下:

要点说明:代码:

复制代码
Matcher m = p.matcher(str);

中的------m:文本匹配器的对象

str:大串

p:规则

m:要在str中找符合p规则的小串

复制代码
m.find()会返回一个boolean类型的结果。如果没有,返回false。反之返回true,并在底层记录字串的起始索引和结束索引+1(+1之后再作为结束索引进行传递)
复制代码
String s = m.group();————方法底层会根据find方法记录的索引进行字符串的获取:subString(起始索引,结束索引);包头不包尾(所以find方法在结束索引位置+1就很有必要)
相关推荐
天使day3 分钟前
Maven
java·maven
汇匠源6 分钟前
共享无人系统,从出行到生活全面覆盖
java·生活
小灰灰要减肥1 小时前
装饰者模式
java
张铁铁是个小胖子1 小时前
MyBatis学习
java·学习·mybatis
Yan.love2 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶2 小时前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥2 小时前
java提高正则处理效率
java·开发语言
智慧老师2 小时前
Spring基础分析13-Spring Security框架
java·后端·spring
lxyzcm2 小时前
C++23新特性解析:[[assume]]属性
java·c++·spring boot·c++23
Kai HVZ3 小时前
python爬虫----爬取视频实战
爬虫·python·音视频