🍬 博主介绍
👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
目录
1、有条件的爬取数据
有如下文本,请按照要求爬取数据。
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。
需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17
需求3:爬取除了版本号为8,11,17的Java文本
代码如下:
java
package Regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regex_demon {
public static void main(String[] args) {
/*
有如下文本,按要求爬取数据。
Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
需求1:爬取版本号为8,11.17的Java文本,但是只要Java,不显示版本号。
需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11 Java17 Java17
需求3:爬取除了版本号为8,11.17的Java文本,
*/
String s = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11," +
"因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久JAVA17也会逐渐登上历史舞台";
//1.定义正则表达式
//?理解为前面的数据Java
//=表示在Java后面要跟随的数据
//但是在获取的时候,只获取前半部分
//需求1:
String regex1 = "Java(?=8|11|17)"; //只匹配Java
//需求2
String regex2 = "((?i)Java)(?=8|11|17)"; //忽略大小写
//需求3
String regex3 = "((?i)Java)(?!=8|11|17)"; // ?!不等于
Pattern p = Pattern.compile(regex3);
Matcher m = p.matcher(s);
while (m.find()){
String g = m.group();
System.out.println(g);
}
}
}
2、贪婪爬取和非贪婪爬取
有如下文本,请按照要求爬取数据。
Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaааaаaa
经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这两个是长期支持版本,下一个长期支
持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
需求1:按照ab+的方式爬取ab,b尽可能多获取
需求2:按照ab+的方式爬取ab,b尽可能少获取
代码如下:
java
package Regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class regex_demon2 {
public static void main(String[] args) {
/*
只写+和*表示贪婪匹配
+? 非贪婪匹配
*? 非贪婪匹配
贪婪爬取:在爬取数据的时候尽可能的多获取数据
非贪婪爬取:在爬取数据的时候尽可能的少获取数据
ab+:
贪婪爬取:abbbbbbbbbbbb
非贪婪爬取:ab
*/
String s = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa" +
"经历了很多版木,目前企业中用的最多的是]ava8和]ava11,因为这两个是长期支持版木。" +
"下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";
String regex = "ab+";
String regex2 = "ab+?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
while (m.find()){
String g = m.group();
System.out.println(g);
}
}
}
正则表达式在字符串方法中的使用
使用代码:
java
package Regex;
public class regex_demon3 {
public static void main(String[] args) {
//public string replaceAll(string regex,string newstr) 按照正则表达式的规则进行替换
//public string[] split(string regex): 按照正则表达式的规则切割字符串
/*
有一段字符串:小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠
要求1:把字符串中三个姓名之间的字母替换为vs
要求2:把字符串中的三个姓名切割出来*/
String s = "小诗诗dqwefqwfqwfwq12312小丹丹dqwefqwfqwfwq12312小惠惠";
//细节:
//方法在底层跟之前一样也会创建文本解析器的对象
//然后从头开始去读取字符串中的内容,只要有满足的,那么就用第一个参数去替换。
//要求1:
/*String result1 = s.replaceAll("[\\w(?!=_)]+","vs");
System.out.println(result1);*/
//要求2:
String[] arr = s.split("[\\w(?!=_)]+");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}