本地爬取
java
package MyApi.a08regexdemo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo03 {
public static void main(String[] args) {
//要求:找出里面所有javaxx
String str="Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
"相信在不久的未来Java17也会逐渐登上历史舞台";
// method1(str);
//1.获取正则表达式的对象
Pattern pattern = Pattern.compile("Java\\d{0,2}");
//2.获取文本匹配器的对象
Matcher m = pattern.matcher(str);
//3.利用循环获取
while(m.find()){
String s=m.group();
System.out.println(s);
}
}
private static void method1(String str) {
//获取正则表达式的对象
Pattern pattern = Pattern.compile("Java\\d{0,2}");
//获取文本匹配器的对象
Matcher m = pattern.matcher(str);
//拿着文本匹配器从头开始读取,寻找是否有满足规则的字串
//如果没有,方法返回false
//如果有,返回true,在底层记录字串的起始索引和结束索引+1
boolean b = m.find();
//方法底层会根据find方法记录的索引进行字符串的截取
//subString(起始索引,结束索引):包头不包尾
//会把截取的小串进行返回
String s1= m.group();
System.out.println(s1);
//第二次调用find的时候,会继续读取后面的内容
//读取到第二个满足要求的字串,方法会继续返回true
//并把第二个字串的起始索引和结束索引+1,进行记录
boolean b1 = m.find();
String s2=m.group();
System.out.println(s2);
}
}
网络爬取
java
package MyApi.a08regexdemo;
import javax.print.DocFlavor;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo04 {
public static void main(String[] args) {
/*需求:
把连接:http://m.sengzan.com/jiaoyu/29104.html?ivk_sa=105883i
中的所有身份证号码都爬取出来
* */
//创建一个url对象
URL url=new URL("http://m.sengzan.com/jiaoyu/29104.html?ivk_sa=105883i");
//连接上这个网址
URLConnection conn=url.openConnection();
//创建一个对象去读取网络中的数据
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())) ;
String line;
//获取正则表达式对象
String regex="[1-9]\\d{17}";
Pattern pattern=Pattern.compile(regex);
while((line=br.readLine())!=null){
Matcher matcher=pattern.matcher(line);
while(matcher.find()){
System.out.println(matcher.group());
}
}
br.close();
}
}
java
package MyApi.a08regexdemo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regexdemoo5 {
public static void main(String[] args) {
/*
* 需求:把下面的文本中的座机号码,邮箱,手机号,热线都爬取出来
* 来黑马程序员学习Java
* 手机号: 18512516758,18512508907
* 或者联系邮箱:boniu@itcast.cn,
* 座机电话:01036517895,010-9895256
* 邮箱:boniu@itcast.cn,
* 热线电话:400-618-9090,400-618-4000,4006184000,4006189090 */
String s="来黑马程序员学习Java" +
"手机号: 18512516758,18512508907" +
"或者联系邮箱:boniu@itcast.cn," +
"座机电话:01036517895,010-9895256" +
"邮箱:boniu@itcast.cn," +
"热线电话:400-618-9090,400-618-4000,4006184000,4006189090";
String regex1="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})";
Pattern pattern=Pattern.compile("regex1");
Matcher m = pattern.matcher(s);
while(m.find()){
String str= m.group();
System.out.println(str);
}
}
}
java
package MyApi.a08regexdemo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regexdemo06 {
public static void main(String[] args) {
String str="java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
"相信在不久的未来Java17也会逐渐登上历史舞台";
//需求1
String regex1="((?i)Java)(?=8|11|17)";
//需求2
String regex2="((?i)Java)(8|11|17)";
String regex3="((?i)Java)(?:8|11|17)";
//需求3
String regex4="((?i)Java)(?!8|11|17)";
Pattern pattern=Pattern.compile(regex4);
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
String s=matcher.group();
System.out.println(s);
}
}
}
贪婪爬取和非贪婪爬取
java
package MyApi.a08regexdemo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regexdemo07 {
public static void main(String[] args) {
String str="Java自从95年问世以来abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa,经历了很多版本,目前企业中用的最多的是Java8和Java11"+"因为这两个是长期支持的版本,下一个长期支持的版本是Java17" +
"相信在不久的未来Java17也会逐渐登上历史舞台";
/*
* 贪婪爬取:在爬取数据的时候尽可能的多获取数据
* 非贪婪爬取:在爬取数据的时候尽可能的少获取数据
* java当中默认是贪婪爬取
* 如果我们在数量词+ * 的后面加上问号,那么此时就是非贪婪爬取*/
//需求1
String regex="ab+";
//需求2
String regex1="ab+?";
Pattern pattern=Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group());
}
}
}