正则表达式和爬虫

目录

一、正则表达式:

作用:

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

细节

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

细节

数量词

二、爬虫

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就很有必要)
相关推荐
程序员小凯2 小时前
Spring Boot文件处理与存储详解
java·spring boot·后端
Miraitowa_cheems3 小时前
LeetCode算法日记 - Day 88: 环绕字符串中唯一的子字符串
java·数据结构·算法·leetcode·深度优先·动态规划
黑云压城After3 小时前
vue2实现图片自定义裁剪功能(uniapp)
java·前端·javascript
B站_计算机毕业设计之家4 小时前
python电商商品评论数据分析可视化系统 爬虫 数据采集 Flask框架 NLP情感分析 LDA主题分析 Bayes评论分类(源码) ✅
大数据·hadoop·爬虫·python·算法·数据分析·1024程序员节
zcl_19915 小时前
记一次ThreadLocal导致的生产事故
java
RoboWizard5 小时前
怎么判断我的电脑是否支持PCIe 5.0 SSD?Kingston FURY Renegade G5
java·spring·智能手机·电脑·金士顿
毕设源码-钟学长5 小时前
【开题答辩全过程】以 儿童游泳预约系统为例,包含答辩的问题和答案
java·eclipse
皮皮林5516 小时前
5种接口频率监控方案实战对比,性能、成本、复杂度全解析!
java
似水流年 光阴已逝6 小时前
从Jar包到K8s上线:全流程拆解+高可用实战
java·kubernetes·jar
YA3336 小时前
java设计模式八、组合模式
java·设计模式·组合模式