【Java】贪婪爬取和非贪婪爬取

一、概念

贪婪爬取:在爬取数据的时候尽可能的多获取数据

非贪婪爬取:在爬取数据的时候尽可能的少获取数据


二、需求1

需求:有如下文本,按要求爬取数据。   

Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa,经历了很多版木,目前企业中用的最多的是]ava8和]ava11,因为这两个是长期支持版木。下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台

需求1:按照ab+的方式爬取ab,b尽可能多获取(前面的 ab+ 是一个正则表达式,由于ab没有使用小括号进行分组,因此这里的 ab+ 表示的是:b出现一次或多次)

在这里,如果使用贪婪爬取,就是尽可能将后面的 b 都获取到,这就是贪婪爬取。

abbbbbbbbbbbb

非贪婪爬取:尽可能少获取,ab 就已经满足 ab+ 的要求了,因此直接获取 ab 就行了。

在Java中,默认的就是贪婪爬取。

如果我们在数量词(eg:+*) 后面加上 ?,那么此时就是非贪婪爬取。

String regex = "ab+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);

while (m.find()) {
    System.out.println(m.group()); // abbbbbbbbbbbb,这就是贪婪爬取
}

但是这个 b 我不想获取这么多,后面加个 ? 就行了。

String regex = "ab+?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);

while (m.find()) {
    System.out.println(m.group()); // ab,这就是非贪婪爬取
}
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值