首页 > 编程语言 > 详细

java正则匹配html片段,并取得标签中的内容

时间:2015-10-25 02:08:00      阅读:298      评论:0      收藏:0      [点我收藏+]

? ? ? ? 最近java群好友发来一个html代码,要帮忙匹配查找html代码里面特定的内容:

? ? ? ? 代码如下:

<dl>

<dd>
    <span class="gray6">年<span class="padl27"></span>代:</span>2013年</dd>

<dd>
    <span class="gray6">朝<span class="padl27"></span>向:</span>东北</dd>

<dd>
    <span class="gray6">楼<span class="padl27"></span>层:</span>第10层(共33层)</dd>

<dd>
    <span class="gray6 ">结<span class="padl27"></span>构:</span>平层</dd>

<dd>
    <span class="gray6">装<span class="padl27"></span>修:</span>毛坯</dd>

<dd>
    <span class="gray6">住宅类别:</span>普通住宅</dd>

<dd>
    <span class="gray6">建筑类别:</span>板楼</dd>

<dd>
    <span class="gray6 ">产权性质:</span>个人产权</dd>

<dd>

</dl>

?

? ? ?

?

? ? ?需求为找到 span中内容为:住宅类别的中后面的内容,即获取“普通住宅”文本,通过分析发现如果直接匹配到具体的

<dd>  <span class="gray6">住宅类别:</span>普通住宅</dd>

?

?发现会有点麻烦, 因为以<dd>开头 并以</dd>结束的模式如果写的不好会匹配整个大段的html(去掉开头和结尾的dl)。所以匹配模式改为先匹配每一个dd中的内容,?

?则模式为:

String regex2 = "<dd.*?>([\\s\\S]*?)</dd>";

?

?然后将匹配的dd字符串在去匹配span查找是否存在“住宅类别”文字。如果匹配说明是我们需要查找的

?匹配span的模式为:

String regex3 = "<span.*?>住宅类别";

?如果找到匹配的dd则将dd标签和span标签全部替换掉:思路如下:

dd=dd.replaceAll("<dd>", "");//替换开头的dd
dd=dd.replaceAll("</dd>", "");//替换结束的订单
dd=dd.replaceAll("<span.*?</span>", "");//替换span标签

??

?完整代码如下:

?由于对正则不是很熟悉,纯粹的摸索。如果有更好的实现方法,往各位看官不吝赐教。

?

public static void main(String[] args) {
		
		String oriStr = "<dl>"+
				"<dd>"+
				"    <span class=\"gray6\">年<span class=\"padl27\"></span>代:</span>2013年</dd>"+
				"<dd>"+
				"    <span class=\"gray6\">朝<span class=\"padl27\"></span>向:</span>东北</dd>"+
				"<dd>"+
				"    <span class=\"gray6\">楼<span class=\"padl27\"></span>层:</span>第10层(共33层)</dd>"+
				"<dd>"+
				"    <span class=\"gray6 \">结<span class=\"padl27\"></span>构:</span>平层</dd>"+
				"<dd>"+
				"    <span class=\"gray6\">装<span class=\"padl27\"></span>修:</span>毛坯</dd>"+
				"<dd>"+
				"    <span class=\"gray6\">住宅类别:</span>普通住宅</dd>"+
				"<dd>"+
				"    <span class=\"gray6\">建筑类别:</span>板楼</dd>"+
				"<dd>"+
				"    <span class=\"gray6 \">产权性质:</span>个人产权</dd>"+
				"<dd>"+
				"</dl>";

		String regex2 = "<dd.*?>([\\s\\S]*?)</dd>";
		String regex3 = "<span.*?>住宅类别";
		Pattern pattern2 = Pattern.compile (regex2);
		Pattern pattern3 = Pattern.compile (regex3);
		Matcher match2 = pattern2.matcher (oriStr);
		Matcher match3 = null;
		while (match2.find ()){//取的每个dd标签
			String dd = match2.group ();
			System.out.println(dd);
			match3 = pattern3.matcher(dd);
			
			if(match3.find()){//找到dd中含有住宅列别的span 将没用的替换掉
				dd=dd.replaceAll("<dd>", "");
				dd=dd.replaceAll("</dd>", "");
				dd=dd.replaceAll("<span.*?</span>", "");
				System.out.println("\n\n\n\n\n找到啦......"+dd+"\n\n\n\n");
			}
		}
		
	}

?

java正则匹配html片段,并取得标签中的内容

原文:http://314649444.iteye.com/blog/2251583

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!