一、给一段文本,爬取出所想要的信息
文本:java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和JAva11因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台。
题目:需求1:爬取版本号为8,11,17的java文本,但是只要java,不显示版本号
需求2:爬取版本号为8,11,17的java文本。正确爬取结果为:java8 java11 java17
需求3:爬取除了版本号为8 11 17的java文本
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
需求1:爬取版本号为8,11,17的java文本,但是只要java,不显示版本号
需求2:爬取版本号为8,11,17的java文本。正确爬取结果为:java8 java11 java17
需求3:爬取除了版本号为8 11 17的java文本
*/
String str="java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和JAva11"+
"因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台";
//1.定义正则表达式
//?理解为前面的数据java
//=表示在java后面要跟随的数据
//但是在获取的时候,只获取前半部分
//需求1:
String regex1="((?i)java)(?=8|11|17)";//为了区分要求中的java,我把java换成了不同的大写
//需求2:
String regex2="((?i)java)(8|11|17)";
String regex3="((?i)java)(?:8|11|17)";
//需求3:
String regex4="((?i)java)(?!8|11|17)";//!表示除了8 11 17
Pattern p=Pattern.compile(regex4);
Matcher m=p.matcher(str);
while(m.find()) {
System.out.println(m.group());
}
}
}
二:贪婪爬取和非贪婪爬取
贪婪爬取:在爬取数据的时候尽可能多的爬取数据
非贪婪爬取:在爬取数据的时候尽可能少的爬取数据
public class RegexDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
只写+和*表示贪婪匹配
+?非贪婪匹配
*? 非贪婪匹配
贪婪爬取:在爬取数据的时候尽可能多的爬取数据
非贪婪爬取:在爬取数据的时候尽可能少的爬取数据
ab+:
贪婪爬取:abbbbbbbbbbb
非贪婪爬取:ab
java当中,默认的就是贪婪爬取
如果我们在数量词+*的后面加上问号,那么此时就是非贪婪爬取
*/
String s="java自从95年问世以来abbbbbbbbbbbbaaaaaaaaa"
+ ",经历了很多版本,目前企业中用的最多的是Java8和JAva11"+
"因为这两个是长期支持版本,下一个长期支持版本是JAVa17,相信在未来不久JAVA17也会逐渐登上历史舞台";
String regex1="ab+?";
Pattern p=Pattern.compile(regex1);
Matcher m=p.matcher(s);
while(m.find()) {
System.out.println(m.group());
}
}
}
小练习:
有一段字符串:小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠
要求1:把字符串中三个姓名之间的字母替换为VS
要求2:把字符串中的三个姓名切割出来
public class RegexDemo4 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//public String replaceAll(String regex,String newStr)
//public String[] split(String regex)
/*
有一段字符串:小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠
要求1:把字符串中三个姓名之间的字母替换为VS
要求2:把字符串中的三个姓名切割出来
*/
String s="小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";
String result=s.replaceAll("[\\w&&[^_]]+", "VS");
System.out.println(result);
String arr[]=s.split("[\\w&&[^_]]");
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
}