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

        代码如下:



java 正则提取html img java正则匹配html标签_Java


1. <dl>
2.   
3. <dd>
4. <span class="gray6">年<span class="padl27"></span>代:</span>2013年</dd>
5.   
6. <dd>
7. <span class="gray6">朝<span class="padl27"></span>向:</span>东北</dd>
8.   
9. <dd>
10. <span class="gray6">楼<span class="padl27"></span>层:</span>第10层(共33层)</dd>
11.   
12. <dd>
13. <span class="gray6 ">结<span class="padl27"></span>构:</span>平层</dd>
14.   
15. <dd>
16. <span class="gray6">装<span class="padl27"></span>修:</span>毛坯</dd>
17.   
18. <dd>
19. <span class="gray6">住宅类别:</span>普通住宅</dd>
20.   
21. <dd>
22. <span class="gray6">建筑类别:</span>板楼</dd>
23.   
24. <dd>
25. <span class="gray6 ">产权性质:</span>个人产权</dd>
26.   
27. <dd>
28.   
29. </dl>



 

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



java 正则提取html img java正则匹配html标签_Java


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



 

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

 则模式为:



java 正则提取html img java正则匹配html标签_Java



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



     

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

     匹配span的模式为:



    java 正则提取html img java正则匹配html标签_Java



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



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



      java 正则提取html img java正则匹配html标签_Java


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


        

       完整代码如下:

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

       



      java 正则提取html img java正则匹配html标签_Java



      1. public static void
      2.           
      3. "<dl>"+  
      4. "<dd>"+  
      5. "    <span class=\"gray6\">年<span class=\"padl27\"></span>代:</span>2013年</dd>"+  
      6. "<dd>"+  
      7. "    <span class=\"gray6\">朝<span class=\"padl27\"></span>向:</span>东北</dd>"+  
      8. "<dd>"+  
      9. "    <span class=\"gray6\">楼<span class=\"padl27\"></span>层:</span>第10层(共33层)</dd>"+  
      10. "<dd>"+  
      11. "    <span class=\"gray6 \">结<span class=\"padl27\"></span>构:</span>平层</dd>"+  
      12. "<dd>"+  
      13. "    <span class=\"gray6\">装<span class=\"padl27\"></span>修:</span>毛坯</dd>"+  
      14. "<dd>"+  
      15. "    <span class=\"gray6\">住宅类别:</span>普通住宅</dd>"+  
      16. "<dd>"+  
      17. "    <span class=\"gray6\">建筑类别:</span>板楼</dd>"+  
      18. "<dd>"+  
      19. "    <span class=\"gray6 \">产权性质:</span>个人产权</dd>"+  
      20. "<dd>"+  
      21. "</dl>";  
      22.   
      23. "<dd.*?>([\\s\\S]*?)</dd>";  
      24. "<span.*?>住宅类别";  
      25.         Pattern pattern2 = Pattern.compile (regex2);  
      26.         Pattern pattern3 = Pattern.compile (regex3);  
      27.         Matcher match2 = pattern2.matcher (oriStr);  
      28. null;  
      29. while (match2.find ()){//取的每个dd标签
      30.             String dd = match2.group ();  
      31.             System.out.println(dd);  
      32.             match3 = pattern3.matcher(dd);  
      33.               
      34. if(match3.find()){//找到dd中含有住宅列别的span 将没用的替换掉
      35. "<dd>", "");  
      36. "</dd>", "");  
      37. "<span.*?</span>", "");  
      38. "\n\n\n\n\n找到啦......"+dd+"\n\n\n\n");  
      39.             }  
      40.         }  
      41.           
      42.     }