API(正则表达式_爬虫)
public class RegexDemo3 {
public static void main(String[] args) {
String str="java是世界上最好的语言,java17,java8,java11啊hi发哦富婆啊覅";
//在其中查找javaxx
//Pattren:表示正则表达式
//Macher:表示匹配器
//获取正则表达式对象
Pattern p1 = Pattern.compile("java\\d{0,2}");
//获取匹配器对象
//m1:表示匹配器对象
//str:表示要匹配的字符串
//p1:表示规则
//m1要在str字符串找符合p1规则的字符串
Matcher m1=p1.matcher(str);
//find():查找符合规则的字符串,找到返回true,找不到返回false(在底层记录的是起始索引和结束索引+1)
boolean flag=m1.find();
System.out.println(flag);//true
//group():获取符合规则的字符串
//substring(起始索引,结束索引);包头不包尾
//(0-4)不包含4
String s1=m1.group();
System.out.println(s1);//java
//第二次find()的时候会继续往后面查找,group()会根据find()的起始索引和结束索引继续往后获取字符串
boolean flag2=m1.find();
System.out.println(flag2);//true
String s2=m1.group();
System.out.println(s2);//java17
}
}
---------------------------------
public class RegexDemo4 {
public static void main(String[] args) {
String str="java是世界上最好的语言,java17,java8,java11啊hi发哦富婆啊覅";
Pattern p = Pattern.compile("java\\d{0,2}");
Matcher m=p.matcher(str);
//循环不断读取直到末尾返回false
while(m.find()){
String s=m.group();
System.out.println(s);
}
String str1="找香香学习java"+
"电话:13112341234"+
"邮箱:xiangxiang@qq.com"+
"电话:13112341235"+
"邮箱:haha@qq.com"+
"座机电话:010-12345678";
Pattern p1=Pattern.compile("[1-9][3-9]\\d{9}");
Pattern p2 = Pattern.compile("\\w+@[\\w&&[^-]]{2,4}(\\.[a-zA-Z]{2,3}){1,3}");
Pattern p3 = Pattern.compile("0\\d{2,3}-?\\d{4,7}");
Matcher m1=p1.matcher(str1);
Matcher m2 = p2.matcher(str1);
Matcher m3 = p3.matcher(str1);
System.out.println("学习java");
//String s=m.group();
//System.out.println(s);
System.out.println("电话:");
while(m1.find()){
String s1=m1.group();
System.out.println(s1);
}
System.out.println("邮箱:");
while(m2.find()){
String s2=m2.group();
System.out.println(s2);
}
System.out.println("座机电话:");
while(m3.find()){
String s3=m3.group();
System.out.println(s3);
}
}
}
----------------------------------------------------------
public class RegexDemo5 {
public static void main(String[] args) {
String str="java是世界上最好的语言,java17,java8,java11啊hi发哦富婆啊覅";
//1.爬取版本号为8,11,17的java文字,但只要java,但不要版本号
//(1.)定义正则表达式
String regex1="java(?=8|11|17)";//?表示前面的java,=表示后面要跟随的8,11,17,要符合java8,11,17但最后读取的还是java
Pattern p1 = Pattern.compile(regex1);
Matcher m1 = p1.matcher(str);
while(m1.find()){
String s = m1.group();
System.out.println(s);
}
//2.爬取版本号为8,11,17的java文字,java8,java11,java17
String regex2="java(8|11|17)";//或者"java(?:8|11|17)"//?表示前面的java,:表示后面要跟随的8,11,17,要符合java8,11,17但最后读取是全部
Pattern p2=Pattern.compile(regex2);
Matcher m2 = p2.matcher(str);
while(m2.find()){
String s=m2.group();
System.out.println(s);
}
//3.爬取除了版本号为8,11,17的java文字
String regex3="java(?!8|11|17)";
Pattern p3=Pattern.compile(regex3);
Matcher m3 = p3.matcher(str);
while(m3.find()){
String s=m3.group();
System.out.println(s);
}
}
}
-----------------------------------------
public class RegexDemo6 {
public static void main(String[] args) {
String str="java是世界上最好的语言,abbbbbbbbbbbbaaaaaaaaaaaa,java17,java8,java11啊hi发哦富婆啊覅";
//只写+和*表示贪婪爬取
//+?和*?表示非贪婪爬取
//java默认的是贪婪爬取
//如果在数量词后面加上?表示非贪婪爬取
//按ab+的形式爬取ab,b尽可能多的爬取
Pattern p1 = Pattern.compile("ab+");
Matcher m1 = p1.matcher(str);
while (m1.find()) {
System.out.println(m1.group());//abbbbbbbbbbbb
}
System.out.println("=====================");
//按ab+的形式爬取ab,b尽可能少的爬取
Pattern p2 = Pattern.compile("ab+?");
Matcher m2 = p2.matcher(str);
while (m2.find()) {
System.out.println(m2.group());//ab
}
}
}
--------------------------------------------------------
public class RegexDemo7 {
public static void main(String[] args) {
//public static replaceAll(String regex,String replacement)//按正则表达式的规则替换
//public String[] split(String regex)//按正则表达式的规则分割
String str="哈哈asddaafsadsfdsfafsad131香香afdasfasdfsadfsad231正正";
//1.把三个名字之间替换成vs
//细节:
//方法在底层跟之前一样也会创建文本解析器(matcher)的对象
//然后从头开始解析,把符合规则的部分替换成新的内容
String s1 = str.replaceAll("\\w{1,25}", "vs");
System.out.println(s1);//哈哈vs香香vs正正
//2.把三个名字分割出来(取除分割符以外的内容)
String[] sp1=str.split("[\\W&&[^\\s]]{2}");
for (int i = 0; i < sp1.length; i++) {
System.out.println(sp1[i]);
}//asddaafsadsfdsfafsad131 afdasfasdfsadfsad231
String[] sp2=str.split("\\w{1,25}");
for (int i = 0; i < sp2.length; i++) {
System.out.println(sp2[i]);
}//哈哈 香香 正正
}
}
http://example.com/2025/05/16/API(%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F_%E7%88%AC%E8%99%AB)/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Hexo!