加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

基础算法7:使用正则提取网页中a标签的链接和标题

发布时间:2020-12-14 04:36:33 所属栏目:百科 来源:网络整理
导读:先放出测试代码,然后再对几个关键点进行简单解释 packagetest;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassTest1{publicstaticvoidmain(String[]args){Stringstr1="ahref="http://www.zifangsky.cn/2015/10/hello-world/"ti

先放出测试代码,然后再对几个关键点进行简单解释

packagetest;

importjava.util.regex.Matcher;
importjava.util.regex.Pattern;

publicclassTest1{

	publicstaticvoidmain(String[]args){
		Stringstr1="<ahref="http://www.zifangsky.cn/2015/10/hello-world/"title=""data-original-title="HelloWorld">HelloWorld</a>";
		Stringstr2="<ahref="http://banzhuanboy.com/363.html"class="post-feature"">123</a>";
		Stringstr3="<aclass="article-title"href="/2015/12/17/Webstorm-Hotkeys-For-Mac/">c</a>";
		Stringstr4="<arel="bookmark"title="PermanentLinkto黑客组织‘SkidNP’涂改了PhantomSquad的网站首页"href='12/hack-30127.htm'>黑</a>";
		Stringstr5="<ahref="http://www.imorlin.com/2015/12/24/1-3/"title=""data-original-title="2015圣诞节雪花代码[天猫+C店]">2015圣诞节雪花代码[天猫+C店]<spanclass="labellabel-newentry-tag">New</span></a>";
		
		Patternpattern=Pattern.compile("<a.*?href=["']?((https?://)?/?[^"']+)["']?.*?>(.+)</a>");
		Matchermatcher=pattern.matcher(str1);
		if(matcher.find()){
			Stringlink=matcher.group(1).trim();
			Stringtitle=matcher.group(3).trim();
			if(!link.startsWith("http")){
				if(link.startsWith("/"))
					link="http://www.zifangsky.cn"+link;
				else
					link="http://www.zifangsky.cn"+link;	
			}
			System.out.println("link:"+link);
			System.out.println("title:"+title);
		}
		
		
		

	}

}

解释:

1 选取了几个有代表性的a标签样式进行测试

2 关于正则匹配模式”<a.*?href=[”‘]?((https?://)?/?[^”‘]+)[”‘]?.*?>(.+)</a>“的说明:

i)<a.*?href= <a开头,中间紧跟着有0个或者多个字符,然后再跟着href=

ii)[”‘]?((https?://)?/? 一个或者0个的” 或者 ‘ ,然后再跟着0个或者一个的http://或者https:// ,再跟着0个或者1个的 /

iii)[^”‘]+ 表示1个以上的不包括’或者” 的任意字符

iv)[”‘]?表示链接后面的’或者” 当然也可能没有

后面的可以根据前面的自己推理,就不解释了

3 matcher.group(1)表示取出链接,也就是第二个()的内容(PS:第一个()表示的是整个正则表达式,默认省略了),在正则中是这一段规则:((https?://)?/?[^”‘]+)

4matcher.group(3) 同理可知,对应的是这一段规则:(.+)

5 对于代码中的http://www.zifangsky.cn ,这是由于部分链接使用了相对路径,比如说:href=’12/hack-30127.htm’ 。这时我们就需要加上它的域名,当然需要根据实际情况来加。这里我就随便乱加了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读