JAVA正则表达式、爬虫

目录

1.正则表达式的作用

1.检验字符串是否满足规则

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

a.Pattern类

1.概述

2实例化对象(静态方法)

3方法(爬虫)

b.Matcher类

1.概述

2.方法(爬虫)

a.查看是否爬到数据

b.取出爬到的数据

c.有条件的爬取数据

d.贪婪爬取和非贪婪爬取

3.利用正则表达式替换字符串

4.捕获分组和非捕获分组

a.捕获分组

b.非捕获分组


1.正则表达式的作用

作用一:检验字符串是否满足规则

作用二:在一段文本中查找满足要求的内容

1.检验字符串是否满足规则

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

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

注意:

转义字符:转义字符通过在普通字符前加上一个特定的前缀(通常是反斜杠“\”)来表示,这个前缀使得紧随其后的字符具有了不同的含义或作用。

\\:前面的\是一个转义字符,改变了后面\原本的含义,把他变成一个普普通通的\而已。

数量词:

  []                                                      里面的内容出现一次

  ()                                                       分组

(?i)abc                                           忽略abc的大小写

  ((?i)a)bc                                            忽略a的大小写

  

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

a.Pattern类

1.概述

表示正则表达式

2实例化对象(静态方法)

3方法(爬虫)

CharSequence        被爬虫东西

b.Matcher类

1.概述

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

2.方法(爬虫)
a.查看是否爬到数据

底层原理:拿着文本匹配器从头开始读取,寻找是否满足规则的子串,如果没有方法返回false,如果有,返回true,在底层记录子串的起始索引和结束索引+1(subString截取)

b.取出爬到的数据

爬虫步骤:

1.获取Pattern对象

通过Pattern p = Pattern.compile("正则表达式");

2.获取Matcher对象

通过Matcher m = p.matcher(str);获得  (m要在str中找符合p规则的小串),其中, m为Matcher对象, p为正则表达式规则, str为要验证的字符串

3.匹配文本中的对象

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

4.截取文本匹配器索引

String s = m.group(); 这时文本匹配器会停留在第一个匹配文本的结束索引+1处, 返回一个文本中索引为(0,4)不包含4索引的字符串(符合规则的)

5.继续匹配和获取索引

重复第3步和第4步, 从上一次停留的地方开始向后查找

c.有条件的爬取数据

String   regex="Java(?=8|11|17)";           将Java8、Java11、Java17中的Java爬取出来 

String   regex="Java(?:8|11|17)";            将Java8、Java11、Java17爬取出来 

String   regex="Java(?!8|11|17)";          将除了Java8、Java11、Java17以外的Java爬取出来 

d.贪婪爬取和非贪婪爬取

贪婪爬取:尽可能多地文本

例如:假设有一个字符串abbbbbbbbbbaaaaaa,并且你使用正则表达式ab+来匹配。由于贪婪匹配的特性,正则表达式会尽可能多地匹配b字符,因此匹配结果将是abbbbbbbbbbb。

非贪婪爬取:尽可能少的匹配字符

例如:abbbbbbbbbbbaaaaaa,但这次使用正则表达式ab+?来匹配。由于非贪婪匹配的特性,正则表达式会尽可能少地匹配b字符,因此匹配结果将是ab。

3.利用正则表达式替换字符串

 

4.捕获分组和非捕获分组

分组:

规则1:从1开始,连续不间断

规则2:以左括号为基准,最左边的是第一组,其次为第二组,以此类推

a.捕获分组

概述:后续还要继续使用本组的数据

正则内部的使用:\\组号

正则外部的使用:$组号

public class Main {
    public static void main(String[] args) {
        String str="我要学学编编编编程程";
        String regex="(.)\\1+";//替换前的数据
        String replacement="$1";//替换后的内容
        String result=str.replaceAll(regex,replacement);
        System.out.println(result);

    }

}

b.非捕获分组

仅仅是把数据阔前来,不占用组号

(?:)(?=)(?!)都是非捕获分组

Java正则表达式爬虫是一种使用正则表达式来匹配和提取网页中的数据的爬虫程序。正则表达式是一种强大的文本匹配工具,可以用来描述和匹配字符串的模式。在Java中,可以使用java.util.regex包提供的类来实现正则表达式的功能。 以下是使用Java正则表达式爬虫的基本步骤: 1. 导入java.util.regex包:在Java程序中,首先需要导入java.util.regex包,以便使用正则表达式相关的类和方法。 2. 创建正则表达式模式:使用Pattern类的compile方法创建一个正则表达式模式。该模式描述了要匹配的字符串的规则。 3. 创建匹配器:使用Pattern类的matcher方法创建一个Matcher对象。Matcher对象用于对输入字符串进行匹配操作。 4. 进行匹配操作:使用Matcher对象的find、matches或replaceAll等方法进行匹配操作。find方法用于查找输入字符串中与模式匹配的子序列;matches方法用于判断整个输入字符串是否与模式匹配;replaceAll方法用于将输入字符串中与模式匹配的部分替换为指定的字符串。 5. 提取匹配结果:使用Matcher对象的group方法提取与模式匹配的子序列。group方法返回一个字符串,表示与模式匹配的子序列。 6. 循环匹配:如果需要提取多个匹配结果,可以使用循环结构来重复进行匹配操作。 下面是一个简单的示例代码,演示了如何使用Java正则表达式爬虫提取网页中的链接: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexCrawler { public static void main(String[] args) { String html = "<a href=\"https://www.example.com\">Example</a>"; String pattern = "<a\\s+href=\"([^\"]+)\">([^<]+)</a>"; Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(html); while (m.find()) { String url = m.group(1); String text = m.group(2); System.out.println("URL: " + url); System.out.println("Text: " + text); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值