java正則表達(dá)式匹配網(wǎng)頁所有網(wǎng)址和鏈接文字的示例
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.net.*;
import java.io.*;
import java.util.regex.*;
/*
根據(jù)指定的規(guī)則,通過構(gòu)造正則表達(dá)式獲取網(wǎng)址
*/
public class Urls
{
private String startUrl; //開始采集網(wǎng)址
String urlContent;
String ContentArea;
private String strAreaBegin ,strAreaEnd ; //采集區(qū)域開始采集字符串和結(jié)束采集字符串
private String stringInUrl,stringNotInUrl;
String strContent;//獲得的采集內(nèi)容
String[] allUrls; //采集到的所有網(wǎng)址
private String regex; //采集規(guī)則
UrlAndTitle urlAndTitle=new UrlAndTitle(); //存儲網(wǎng)址和標(biāo)題
public static void main(String[] args)
{
Urls myurl=new Urls("<body","/body>");
myurl.getStartUrl("http://www.zuzwn.com/");
myurl.getUrlContent();
myurl.getContentArea();
myurl.getStartUrl("http://www.zuzwn.com/");
myurl.getStringNotInUrl("google");
myurl.Urls();
//System.out.println("startUrl:"+myurl.startUrl);
//System.out.println("urlcontent:"+myurl.urlContent);
//System.out.println("ContentArea:"+myurl.ContentArea);
}
//初始化構(gòu)造函數(shù) strAreaBegin 和strAreaEnd
public Urls (String strAreaBegin,String strAreaEnd)
{
this.strAreaBegin=strAreaBegin;
this.strAreaEnd=strAreaEnd;
}
//
public void Urls()
{
int i=0;
//String regex ="<a href="?'?http://[a-zA-Z0-9]+/.[a-zA-Z0-9]+/.[a-zA-Z]+/?[/.?[/S|/s]]+[a>]$";
String regex ="<a.*?/a>";
//String regex ="http://.*?>";
Pattern pt=Pattern.compile(regex);
Matcher mt=pt.matcher(ContentArea);
while(mt.find())
{
System.out.println(mt.group());
i++;
//獲取標(biāo)題
Matcher title=Pattern.compile(">.*?</a>").matcher(mt.group());
while(title.find())
{
System.out.println("標(biāo)題:"+title.group().replaceAll(">|</a>",""));
}
//獲取網(wǎng)址
Matcher myurl=Pattern.compile("href=.*?>").matcher(mt.group());
while(myurl.find())
{
System.out.println("網(wǎng)址:"+myurl.group().replaceAll("href=|>",""));
}
System.out.println();
}
System.out.println("共有"+i+"個(gè)符合結(jié)果");
}
//獲得開始采集網(wǎng)址
public void getStartUrl(String startUrl)
{
this.startUrl=startUrl;
}
//獲得網(wǎng)址所在內(nèi)容;
public void getUrlContent()
{
StringBuffer is=new StringBuffer();
try
{
URL myUrl=new URL(startUrl);
BufferedReader br= new BufferedReader(
new InputStreamReader(myUrl.openStream()));
String s;
while((s=br.readLine())!=null)
{
is.append(s);
}
urlContent=is.toString();
}
catch(Exception e)
{
System.out.println("網(wǎng)址文件未能輸出");
e.printStackTrace();
}
}
//獲得網(wǎng)址所在的匹配區(qū)域部分
public void getContentArea()
{
int pos1=0,pos2=0;
pos1= urlContent.indexOf(strAreaBegin)+strAreaBegin.length();
pos2=urlContent.indexOf(strAreaEnd,pos1);
ContentArea=urlContent.substring(pos1,pos2);
}
//以下兩個(gè)函數(shù)獲得網(wǎng)址應(yīng)該要包含的關(guān)鍵字及不能包含的關(guān)鍵字
//這里只做初步的實(shí)驗(yàn)。后期,保護(hù)的關(guān)鍵字及不能包含的關(guān)鍵字應(yīng)該是不只一個(gè)的。
public void getStringInUrl(String stringInUrl)
{
this.stringInUrl=stringInUrl;
}
public void getStringNotInUrl(String stringNotInUrl)
{
this.stringNotInUrl=stringNotInUrl;
}
//獲取采集規(guī)則
//獲取url網(wǎng)址
public void getUrl()
{
}
public String getRegex()
{
return regex;
}
class UrlAndTitle
{
String myURL;
String title;
}
}
相關(guān)文章
SpringBoot實(shí)現(xiàn)動態(tài)控制定時(shí)任務(wù)支持多參數(shù)功能
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)動態(tài)控制定時(shí)任務(wù)-支持多參數(shù)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05springboot2.0整合logback日志的詳細(xì)代碼
這篇文章主要介紹了springboot2.0整合logback日志的應(yīng)用場景分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Java通過MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲
這篇文章主要介紹了如何在Java中MySQL的加解密函數(shù)實(shí)現(xiàn)敏感字段存儲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-03-03java多線程中的生產(chǎn)者和消費(fèi)者隊(duì)列詳解
這篇文章主要介紹了java多線程中的生產(chǎn)者和消費(fèi)者隊(duì)列詳解,隊(duì)列,是一種數(shù)據(jù)結(jié)構(gòu),除了優(yōu)先級隊(duì)列和LIFO隊(duì)列外,隊(duì)列都是以FIFO(先進(jìn)先出)的方式對各個(gè)元素進(jìn)行排序的,需要的朋友可以參考下2024-01-01Spring自帶的校驗(yàn)框架Validation的使用實(shí)例
今天小編就為大家分享一篇關(guān)于Spring自帶的校驗(yàn)框架Validation的使用實(shí)例,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了SpringMVC中控制器返回JSON數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證詳細(xì)步驟
這篇文章主要介紹了SpringBoot+Vue+JWT的前后端分離登錄認(rèn)證,其實(shí)創(chuàng)建后端springboot工程也很簡單,本文安裝idea步驟一步步給大家詳細(xì)介紹,需要的朋友可以參考下2021-09-09