🍬 博主介绍
👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
练习
本地爬虫和网络爬虫
有如下文本,请按照要求爬取数据。
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是lava8和Iava11,因为这两个是
长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
要求:找出里面所有的JavaXX
本地爬虫代码如下:
这里用while循环简单,不过也可以像下面的那种就是一直重复写,但是跟麻烦
java
package Regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class pattern {
public static void main(String[] args) {
/* 有如下文本,请按照要求爬取数据。
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
要求:找出里面所有的JavaXX
*/
String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +
"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
//method1(str);
//1、获取正则表达式的对象
Pattern p = Pattern.compile("Java\\d{0,2}");
//2、获取文本匹配器的对象
//拿着m去读取str,找符合p规则的子串
Matcher m = p.matcher(str);
//3、利用循环获取
while (m.find()){
String s = m.group();
System.out.println(s);
}
}
private static void method1(String str) {
//pattern:表示正则表达式
//Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取。
// 在大串中去找符合匹配的字串
//获取正则表达式的对象
Pattern p = Pattern.compile("Java\\d{0,2}");
//获取文本匹配器的对象
//m:文本匹配器的对象
//str:大串
//p:规则
Matcher m = p.matcher(str);
//拿着文本匹配器从头开始读取,寻找是否有满足的子串
//如果没有,方法返回false
//如果有,返回true,在底层记录子串的起始索引和结束索引+1
//0,4
boolean b = m.find();
//方法底层全部会按照find()方法进行索引进行字符串的截取
//substring(起始索引,结束索引);包头不包尾
//(0,4),不包含4 索引
String s1 = m.group();
System.out.println(s1);
//第二次调用find方法
b = m.find();
//第二次调用group方法的时候,会根据find方法记录的索引再次截取子串
String s2 = m.group();
System.out.println(s2);
}
}
网络爬虫代码如下
java
package com.itheima.a08regexdemo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo7 {
public static void main(String[] args) throws IOException {
/* 扩展需求2:
把连接:https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i
中所有的身份证号码都爬取出来。
*/
//创建一个URL对象
URL url = new URL("https://m.sengzan.com/jiaoyu/29104.html?ivk sa=1025883i");
//连接上这个网址
//细节:保证网络是畅通
URLConnection conn = url.openConnection();//创建一个对象去读取网络中的数据
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
//获取正则表达式的对象pattern
String regex = "[1-9]\\d{17}";
Pattern pattern = Pattern.compile(regex);//在读取的时候每次读一整行
while ((line = br.readLine()) != null) {
//拿着文本匹配器的对象matcher按照pattern的规则去读取当前的这一行信息
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
br.close();
}
}
练习需求
把下面文本中的座机电话,邮箱,手机号,热线都爬取出来。
来实验室程序员学习Java,
手机号:18512516758,18512508907或者联系邮箱:boniu@itcast.cn,
座机电话:01036517895,010-98951256邮箱:bozai@itcast.cn,
热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090
代码如下:
java
package Regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class pattern2 {
public static void main(String[] args) {
/*
需求:把下面文本中的座机电话,邮箱,手机号,热线都爬取出来。
来黑马程序员学习Java,
手机号:18512516758,18512508907或者联系邮箱:boniu@itcast.cn,
座机电话:01036517895,010-98951256邮箱:bozai@itcast.cn,
热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090
手机号的正则表达式:1[3-9]\d{9}
邮箱的正则表达式:\w+@[\w&&[^_]]{2,6}(\.[a-zA-Z]{2,3}){1,2}座机电话的正则表达式:θ\d{2,3}-?[1-9]\d{4,9}
热线电话的正则表达式:400-?[1-9]\\d{2}-?[1-9]\\d{3}
*/
String s = "来实验室程序员学习Java," +
"电话:18512516758,18512508907" + "或者联系邮箱:boniu@itcast.cn," +
"座机电话:01036517895,010-98951256" + "邮箱:bozai@itcast.cn," +
"热线电话:400-618-9090 ,400-618-4000,4006184000,4006189090";
String regex = "(1[3-9]\\d{9})|(\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2})" +
"|(0\\d{2,3}-?[1-9]\\d{4,9})" +
"(400-?[1-9]\\d{2}-?[1-9]\\d{3})";
//1、获取正确的正则表达式的对象
Pattern p = Pattern.compile(regex);
//2、获取文本匹配的对象
//利用m去读取s,会按照p的规则找里面的小串
Matcher m = p.matcher(s);
//3、利用循环获取每一个数据
while (m.find()){
String str = m.group();
System.out.println(str);
}
}
}