一、定义
【回顾】正则表达式的作用
- 作用一:校验字符串是否满足规则
- 作用二:在一段文本中查找满足要求的内容——爬虫
二、本地爬虫VS网络爬虫
2-1、本地爬虫
示例:
代码优化:
public static void main(String[] args) {
// 大串
String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久|ava17也会逐渐登上历史舞台";
// 获取正则表达式对象
Pattern p = Pattern.compile("Java\\d{0,2}");
// 获取文本匹配去对象
Matcher m = p.matcher(str);
while (m.find()){
String s1 = m.group();
System.out.println(s1);
}
}
2-2、网络爬虫
示例:
三、带条件爬取VS贪婪爬取VS非贪婪爬取
3-1、带条件爬取
示例:
?=:意味着它用于匹配一个位置,该位置后面的字符序列能够匹配一个特定的模式,但本身不消耗任何字符。
3-2、贪婪爬取VS非贪婪爬取
- 贪婪爬取:在爬取数据的时候尽可能的多获取数据;
- 非贪婪爬取:在爬取数据的时候尽可能的少获取数据。
示例:
示例:
public static void main(String[] args) {
String str = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa经历了很多版本,目前企业中用的最多的是!ava8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
// 贪婪爬取
String regex = "ab+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
while (m.find()){
// abbbbbbbbbbbb
System.out.println(m.group());
}
// 非贪婪爬取
String regex2 = "ab+?";
Pattern p2 = Pattern.compile(regex2);
Matcher m2 = p2.matcher(str);
while (m2.find()){
// ab
System.out.println(m2.group());
}
}