本地爬取
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="((?i)Java)(?=8|11|17)";
//需求2String regex2="((?i)Java)(8|11|17)";String regex3="((?i)Java)(?:8|11|17)";//需求3String regex4="((?i)Java)(?!8|11|17)";Pattern pattern=Pattern.compile(regex4);Matcher matcher = pattern.matcher(str);while(matcher.find()){String s=matcher.group();System.out.println(s);}}
}
貪婪爬取和非貪婪爬取

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+?";Pattern pattern=Pattern.compile(regex);Matcher matcher = pattern.matcher(str);while(matcher.find()){System.out.println(matcher.group());}}
}