java正则表达式(HTML提取)

来源:互联网 发布:java中tcp和udp的区别 编辑:程序博客网 时间:2024/05/16 23:36


1、 过滤<a></a>标签

<\\s*a\\s.*?href\\s*=\\s*[^>]*\\s*>\\s*(.*?)\\s*<\\s*/\\s*a\\s*>

2、过滤Img标签

<\\s*img\\s*([^>]*)\\s*/?\\s*>

3、过滤Img标签下的src

<\\s*img\\s*(?:[^>]*)src\\s*=\\s*([^>]+)

4、过滤Javascript标签

<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>

5、link标签

<\\s*link\\s.*?href\\s*=\\s*[^>]*\\s*/?\\s*>

6、link标签

<\\s*style\\s*[^>]*?\\s*>\\s*[\\s\\S]*?\\s*<\\s*/\\s*style\\s*?>

7、标签中的class属性

<\\s*.*(class\\s*=\\s*[^>]+)?\\s*>

测试类如下:

[java] view plaincopy
  1. <pre name="code" class="java">import java.util.ArrayList;  
  2. import java.util.HashMap;  
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6. import java.util.regex.Matcher;  
  7. import java.util.regex.Pattern;  
  8.   
  9. import com.file.FileDownLoad;  
  10. import com.file.UploadBean;  
  11.   
  12. public class ParseContent {  
  13.     // 过滤<a></a>标签  
  14.     private static String regxpForATag = "<\\s*a\\s.*?href\\s*=\\s*[^>]*\\s*>\\s*(.*?)\\s*<\\s*/\\s*a\\s*>";  
  15.     private static Pattern patternHref = Pattern.compile(regxpForATag,  
  16.             Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  17.     private static Matcher matcherHref = null;  
  18.   
  19.     // 过滤Img标签  
  20.     private static String regxpForImgTag = "<\\s*img\\s*([^>]*)\\s*/?\\s*>";  
  21.     private static Pattern patternImg = Pattern.compile(regxpForImgTag,  
  22.             Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  23.   
  24.     // 过滤Img标签下的src  
  25.     private static final Pattern patternImgStr = Pattern.compile(  
  26.             "<\\s*img\\s*(?:[^>]*)src\\s*=\\s*([^>]+)",  
  27.             Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  28.   
  29.     // 过滤Javascript标签  
  30.     // "<\\s*script\\s*.*[^>]*\\s*>\\s*(.*?)\\s*<\\s*/\\s*script\\s*>"  
  31.     // "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"  
  32.     private static String regxpForJsTag = "<\\s*script\\s*[^>]*?\\s*>\\s*[\\s\\S]*?\\s*<\\s*/\\s*script\\s*?>";  
  33.     private static Pattern patternJs = Pattern.compile(regxpForJsTag,  
  34.             Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  35.   
  36.     // 过滤标签标签下的class  
  37.     private static final Pattern patternStyleClass = Pattern.compile(  
  38.             "<\\s*.*(class\\s*=\\s*[^>]+)?\\s*>", Pattern.CASE_INSENSITIVE  
  39.                     | Pattern.MULTILINE);  
  40.   
  41.     // 过滤link标签  
  42.     private static final Pattern patternLink = Pattern.compile(  
  43.             "<\\s*link\\s.*?href\\s*=\\s*[^>]*\\s*/?\\s*>",  
  44.             Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  45.   
  46.     // 过滤style标签  
  47.     private static final Pattern patternStyle = Pattern.compile(  
  48.             "<\\s*style\\s*[^>]*?\\s*>\\s*[\\s\\S]*?\\s*<\\s*/\\s*style\\s*?>",  
  49.             Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  50.   
  51.     private ParseContent() {  
  52.     }  
  53.   
  54.     /** 
  55.      * 1、<a><img /></a> 
  56.      *  
  57.      * @param xmlString 
  58.      *             
  59.      * @return 
  60.      */  
  61.     private static String filterdAdvertising(String xmlString) {  
  62.         // matcher = pattern  
  63.         // .matcher("<img src='' >dsgsdgfsd<a href = ' ' ><imG src='sdfsdf'/>< /  
  64.         // A >sdfgsdhf < A hrEf = \" dsd\" > sdgsdfgsdg</a>1212121 < img src = '  
  65.         // ' / >< a href ='href'><img href='hhhhhh' />sdfsfd dfdf</a>1sdfsdf1");  
  66.   
  67.         List<String> advertisingList = null;  
  68.         String returnString = xmlString;  
  69.         if (xmlString != null && !"".equals(returnString)) {  
  70.             matcherHref = patternHref.matcher(xmlString);  
  71.             advertisingList = new ArrayList<String>();  
  72.   
  73.             while (matcherHref.find()) {  
  74.                 String hrefString = matcherHref.group();  
  75.                 Matcher matcherImg = patternImg.matcher(hrefString);  
  76.                 while (matcherImg.find()) {  
  77.                     advertisingList.add(matcherHref.group());  
  78.                 }  
  79.             }  
  80.         }  
  81.         // System.out.println(returnString);  
  82.         if (advertisingList != null && advertisingList.size() > 0) {  
  83.             for (String string : advertisingList) {  
  84.                 // System.out.println(string);  
  85.                 returnString = returnString.replace(string, "$$");  
  86.                 // System.out.println(returnString);  
  87.                 // System.out.println("############################");  
  88.             }  
  89.         }  
  90.         return returnString;  
  91.     }  
  92.   
  93.     /** 
  94.      * 2、过滤图片 
  95.      *  
  96.      * @param xmlString 
  97.      *             
  98.      * @return 
  99.      */  
  100.     private static String filterImgs(String xmlString, String savepath)  
  101.             throws Exception {  
  102.         String returnString = xmlString;  
  103.   
  104.         List<UploadBean> resultList = new ArrayList<UploadBean>();  
  105.         Map<String, String> map = new HashMap<String, String>();  
  106.         // System.out.println(tempString);  
  107.         Matcher matcherImg = patternImg.matcher(returnString);  
  108.         int count = 10;  
  109.         while (matcherImg.find()) {  
  110.             String imgString = matcherImg.group();  
  111.             UploadBean uploadbean = new UploadBean();  
  112.             String src = filterImgSrc(imgString);  
  113.             System.out.println(src);  
  114.             String[] test = src.split("/");  
  115.             String imagename = test[test.length - 1];  
  116.             uploadbean.setSavepath(savepath + "/" + imagename);  
  117.             uploadbean.setUploadsrc(src);  
  118.             resultList.add(uploadbean);  
  119.   
  120.         }  
  121.         map = FileDownLoad.batchDownLoad(resultList);  
  122.         Iterator<String> iterator = map.keySet().iterator();  
  123.         while (iterator.hasNext()) {  
  124.             String srcString = iterator.next();  
  125.             String localString = map.get(srcString);  
  126.             // System.out.println(srcString);  
  127.             // System.out.println(localString);  
  128.             returnString = returnString.replace(srcString, localString);  
  129.         }  
  130.   
  131.         return returnString;  
  132.     }  
  133.   
  134.     /** 
  135.      * 过滤Img下的src 
  136.      *  
  137.      * @param imgString 
  138.      * @return 
  139.      */  
  140.     private static List<String> getImgSrc(String imgString) {  
  141.         Matcher matcher = patternImgStr.matcher(imgString);  
  142.         List<String> list = new ArrayList<String>();  
  143.         while (matcher.find()) {  
  144.             String group = matcher.group(1);  
  145.             if (group == null) {  
  146.                 continue;  
  147.             }  
  148.             // 这里可能还需要更复杂的判断,用以处理src="...."内的一些转义符  
  149.             if (group.startsWith("'")) {  
  150.                 list.add(group.substring(1, group.indexOf("'"1)));  
  151.             } else if (group.startsWith("\"")) {  
  152.                 list.add(group.substring(1, group.indexOf("\""1)));  
  153.             } else {  
  154.                 list.add(group.split("\\s")[0]);  
  155.             }  
  156.         }  
  157.         // for (String string : list) {  
  158.         // System.out.println(string);  
  159.         // }  
  160.         return list;  
  161.     }  
  162.   
  163.     /** 
  164.      * 过滤Img下的src 
  165.      *  
  166.      * @param imgString 
  167.      * @return 
  168.      */  
  169.     private static String filterImgSrc(String imgString) {  
  170.         Matcher matcher = patternImgStr.matcher(imgString);  
  171.         String returnString = null;  
  172.         while (matcher.find()) {  
  173.             String group = matcher.group(1);  
  174.             if (group == null) {  
  175.                 continue;  
  176.             }  
  177.             // 这里可能还需要更复杂的判断,用以处理src="...."内的一些转义符  
  178.             if (group.startsWith("'")) {  
  179.                 returnString = group.substring(1, group.indexOf("'"1));  
  180.             } else if (group.startsWith("\"")) {  
  181.                 returnString = group.substring(1, group.indexOf("\""1));  
  182.             } else {  
  183.                 returnString = group.split("\\s")[0];  
  184.             }  
  185.         }  
  186.         return returnString;  
  187.     }  
  188.   
  189.     /** 
  190.      * 过滤掉Javascript 
  191.      *  
  192.      * @param contentString 
  193.      * @return 
  194.      */  
  195.     private static String filterScript(String contentString) {  
  196.         String returnString = contentString;  
  197.         Matcher matcher = patternJs.matcher(returnString);  
  198.         while (matcher.find()) {  
  199.             String group = matcher.group();  
  200.             if (group == null) {  
  201.                 continue;  
  202.             }  
  203.             returnString = returnString.replace(group, "$$");  
  204.         }  
  205.         // System.out.println(returnString);  
  206.         return returnString;  
  207.     }  
  208.   
  209.     /** 
  210.      * 过滤掉样式class="" 
  211.      *  
  212.      * @param contentString 
  213.      * @return 
  214.      */  
  215.     private static String filterStyleClass(String contentString) {  
  216.         String returnString = contentString;  
  217.   
  218.         Pattern patternStyleClass = Pattern.compile(  
  219.                 "(\\s*class\\s*=\\s*[\"|\'](.*?)[\"|\']\\s*?)",  
  220.                 Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);  
  221.         Matcher matcher = patternStyleClass.matcher(returnString);  
  222.         while (matcher.find()) {  
  223.             String group = matcher.group();  
  224.             if (group == null) {  
  225.                 continue;  
  226.             }  
  227.             // System.out.println(group);  
  228.             returnString = returnString.replace(group, "$$");  
  229.         }  
  230.         // System.out.println(returnString);  
  231.         return returnString;  
  232.     }  
  233.   
  234.     /** 
  235.      * 过滤link标签 
  236.      *  
  237.      * @param contentString 
  238.      * @return 
  239.      */  
  240.     public static String filterLink(String contentString) {  
  241.         String returnString = contentString;  
  242.         Matcher matcher = patternLink.matcher(returnString);  
  243.         while (matcher.find()) {  
  244.             String group = matcher.group();  
  245.             if (group == null) {  
  246.                 continue;  
  247.             }  
  248.             // System.out.println(group);  
  249.             returnString = returnString.replace(group, "$$");  
  250.         }  
  251.         // System.out.println(returnString);  
  252.         return returnString;  
  253.     }  
  254.   
  255.     /** 
  256.      * 过滤style标签 
  257.      *  
  258.      * @param contentString 
  259.      * @return 
  260.      */  
  261.     public static String filterStyle(String contentString) {  
  262.         String returnString = contentString;  
  263.         Matcher matcher = patternStyle.matcher(returnString);  
  264.         while (matcher.find()) {  
  265.             String group = matcher.group();  
  266.             if (group == null) {  
  267.                 continue;  
  268.             }  
  269.             // System.out.println(group);  
  270.             returnString = returnString.replace(group, "$$");  
  271.         }  
  272.         // System.out.println(returnString);  
  273.         return returnString;  
  274.     }  
  275.   
  276.     public static void main(String[] args) {  
  277.         String contentString = "ddddd<style class=\"testsdfsdfsfdsgdsghdfs\" sdf sdf  sdf ></style><div style='display:none'>sdf&lt;/div><link class='1234' href='东四饭店sgs对公' > <style href=''>ddd</style><link href='javascript:function (){}' ></div>的闪光灯<tr class=\"hidsdy\"></tr> <style href=''>ddd</style>";  
  278.         System.out.println(filterStyle(contentString));  
  279.     }  
  280.   
  281.     /** 
  282.      * 过滤全部 
  283.      *  
  284.      * @param contentString 
  285.      * @param savepath 
  286.      * @return 
  287.      */  
  288.     public static String filterContent(String contentString, String savepath)  
  289.             throws Exception {  
  290.         String returnString = contentString;  
  291.         // System.out.println(returnString);  
  292.         //1、过滤广告  
  293.         returnString = filterdAdvertising(returnString);  
  294.         //2、过滤图片  
  295.         returnString = filterImgs(returnString, savepath);  
  296.         //3、过滤script  
  297.         returnString = filterScript(returnString);  
  298.         //4、过滤link  
  299.         returnString = filterLink(returnString);  
  300.         //5、过滤Style  
  301.         returnString = filterStyle(returnString);  
  302.         //6、过滤class  
  303.         returnString = filterStyleClass(returnString);  
  304.         // System.out.println("############################");  
  305.         // System.out.println(returnString);  
  306.         return returnString;  
  307.     }  
  308. }</pre><br>  
  309. <br>  
  310. <p></p>  
  311. <pre></pre>  
  312. <br>  
  313. <p></p> 
0 0
原创粉丝点击