本地爬取
package MyApi.a08regexdemo;import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexDemo03 {public static void main(String[] args) { //要求:找出里面所有javaxxString 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,在底层记录字串的起始索引和结束索引+1boolean 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);}}
网络爬取
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();}}
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);}}}
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也会逐渐登上历史舞台"; //需求1String regex1="((" />
贪婪爬取和非贪婪爬取
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当中默认是贪婪爬取 * 如果我们在数量词+ * 的后面加上问号,那么此时就是非贪婪爬取*///需求1String regex="ab+";//需求2String regex1="ab+" />