本地爬虫:
找到这句话里面的JavaXX
Java自1995年问世以来,经历了很多版本,目前企业中普遍使用的是Java8和Java11。因为这两个是长期支持版本," +
"下一个长期支持版本是Java17,相信在未来不久Java17也会慢慢退出历史的舞台

package com.jdL.day19classwork;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class crawlerTest {
public static void main(String[] args) {
String str="Java自1995年问世以来,经历了很多版本,目前企业中普遍使用的是Java8和Java11。因为这两个是长期支持版本," +
"下一个长期支持版本是Java17,相信在未来不久Java17也会慢慢退出历史的舞台;";
//要求:爬虫找出所有的Javaxx
// Pattern p=Pattern.compile("Java\\d{0,2}");
// //获取文本匹配器对象
// //m:文本匹配器的对象
// //str:大串
// //p:规则
// //m要在str中找符合p规则的小串
// //如果有返回true,在底层记录子串的起始索引和结束索引+1
// Matcher m=p.matcher(str);
// //拿着文本匹配器从头开始读取
// //方法的底层会根据find方法记录的索引进行字符串的截取
// boolean r=m.find();
// String s1=m.group();
// System.out.println(s1);
//
// r=m.find();
// String s2=m.group();
// System.out.println(s2);
//写一个方法
//1、获取正则表达式的对象
Pattern p=Pattern.compile("Java\\d{0,2}");
//2、获取一个文本匹配器
//可以理解为用文本匹配器m去str里面找p规则的字串
Matcher m=p.matcher(str);
//m.find表示找到了目标字符串,并且记录目标串的索引
while(m.find()){
String a=m.group();//每一次获取到的字串
System.out.println(a);
}
}
}
网络爬虫:(这里还没有调整好)
package com.jdL.day19classwork;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class crawlerTest1 {
public static void main(String[] args) throws IOException {
//爬取相关网络上文本
//创建一个URL对象
URL url=new URL("https://dushu.baidu.com/pc/reader?gid=4315647122&cid=10225072");
//连接这个网络
URLConnection conn=url.openConnection();
//创建一个对象读取网络中的数据
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();
}
}

String regelx = "(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 p1 = Pattern.compile(regelx);
Matcher m = p1.matcher(s);
while (m.find()) {
String result = m.group();
System.out.println(result);
练习:
String str="Java自1995年问世以来,经历了很多版本,目前企业中普遍使用的是Java8和Java11。因为这两个是长期支持版本," +
"下一个长期支持版本是Java17,相信在未来不久Java17也会慢慢退出历史的舞台;";
//需求1:爬取版本号为8,11,17的Java版本,但是只要Java,不要版本号
//需求2:爬取版本号为8,11,17的Java版本,需要版本号,正确的格式为Java11,Java17
//需求3:爬取除了版本8.11.17的Java版本
需求1:(正前瞻语言)
String regex="Java(?=[1-9][1-9]?)";
Pattern p = Pattern.compile(regex);
Matcher m =p.matcher(str);
while(m.find()){
String result = m.group();
System.out.println(result);
需求2:
String regex="Java[1-9][1-9]?";
Pattern p = Pattern.compile(regex);
Matcher m =p.matcher(str);
while(m.find()){
String result = m.group();
System.out.println(result);
}
需求3(负前瞻语言)
String regex="Java(?![1-9][1-9]?)";
Pattern p = Pattern.compile(regex);
Matcher m =p.matcher(str);
while(m.find()){
String result = m.group();
System.out.println(result);
}
贪婪爬取:

贪婪:
String regex="ab+";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find()){
String result=m.group();
System.out.println(result);
}
非贪婪:
String regex="ab+?";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
while(m.find()){
String result=m.group();
System.out.println(result);
}

String str="小诗诗dahdhude1234小丹丹dhuekiuueqydie789小慧慧"; //需求1:把三个名字之间的字符和数字改为vs //需求2:把三个名字切割出来
需求1: String regex="\\w+"; //Pattern p=Pattern.compile(regex); str=str.replaceAll(regex,"vs"); System.out.println(str);
需求2:
String regex="\\w+";
//Pattern p=Pattern.compile(regex);
String[] arr=str.split(regex);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
分组:

1、
String regex="(.).+\\1";
System.out.println("a112a".matches(regex));
System.out.println("b$$$b".matches(regex));
System.out.println("c1010c".matches(regex));
2、
String regex1="(.+).+\\1";
System.out.println("abc112abc".matches(regex1));
System.out.println("bc$$$bc".matches(regex1));
System.out.println("cc1010cc".matches(regex1));
3、
String regex2="((.)\\2*).+\\1";
System.out.println("abc112abc".matches(regex2));
System.out.println("aab$$$aab".matches(regex2));
System.out.println("ccc1010ccc".matches(regex2));
我要学学编编编编编编编程程程程程程程程程
把上面的字符串替换去重
String str="我要学学编编编编编编编程程程程程程程程程";
//(.)重复内容的第一个字符当作第一个组
//\\1表示第一个字符再次出现
//+至少一次
//$1把正则表达式第一组再次拿出来用
String result=str.replaceAll("(.)\\1+","$1");
System.out.println(result);

2475

被折叠的 条评论
为什么被折叠?



