java正则表达式过滤html标签

import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
 
/** 
 * Title: HTML相关的正则表达式工具类  
 * Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记   
 * Copyright: Copyright (c) 2006 
 *
 * @authorhejian 
 * @version 1.0 
 * @createtime 2006-10-16 
 */ 
 
public classHtmlRegexpUtil {  
   privatefinalstaticStringregxpForHtml= "<([^>]*)>"; // 过滤所有以<开头以>结尾的标签  
 
   privatefinalstaticStringregxpForImgTag= "<\\s*img\\s+([^>]*)\\s*>"; // 找出IMG标签  
 
   privatefinalstaticStringregxpForImaTagSrcAttrib = "src=\"([^\"]+)\""; // 找出IMG标签的SRC属性  
   
   publicHtmlRegexpUtil() {
   }  
 
   /**  
     * 基本功能:替换标记以正常显示   
     * @param input 
     * @return String 
     */ 
   publicString replaceTag(String input) {  
        if (!hasSpecialChars(input)) {  
            return input;  
        }  
        StringBuffer filtered = newStringBuffer(input.length());  
        char c;  
        for (int i = 0; i <= input.length() - 1; i++){  
            c = input.charAt(i);  
            switch (c) {  
            case'<':  
                filtered.append("<");  
                break;  
            case'>':  
                filtered.append(">");  
                break;  
            case'"':  
                filtered.append(""");  
                break;  
            case'&':  
                filtered.append("&");  
                break;  
            default:  
                filtered.append(c);  
            }  
 
        }  
        return (filtered.toString());  
   }  
 
   /**   
     * 基本功能:判断标记是否存在  
     * @param input 
     * @return boolean 
     */ 
   publicbooleanhasSpecialChars(String input) {  
        boolean flag =false;  
        if ((input !=null) && (input.length() > 0)) {  
            char c;  
            for (int i = 0; i <= input.length() - 1; i++){  
                c = input.charAt(i);  
                switch (c) {  
                case'>':  
                    flag = true;  
                    break;  
                case'<':  
                    flag = true;  
                    break;  
                case'"':  
                    flag = true;  
                    break;  
                case'&':  
                    flag = true;  
                    break;  
                }  
            }  
        }  
        return flag;  
   }  
 
   /**   
     * 基本功能:过滤所有以"<"开头以">"结尾的标签  
     * @param str 
     * @return String 
     */ 
   publicstaticString filterHtml(String str) {  
        Pattern pattern = Pattern.compile(regxpForHtml);  
        Matcher matcher =pattern.matcher(str);  
        StringBuffer sb = new StringBuffer();  
        boolean result1 = matcher.find();  
        while (result1) {  
            matcher.appendReplacement(sb, "");  
            result1 = matcher.find();  
        }  
        matcher.appendTail(sb);  
        return sb.toString();  
   }  
 
   /**  
     * 基本功能:过滤指定标签 
     * @param str 
     * @param tag 
     * 指定标签 
     * @return String 
     */ 
   publicstaticString fiterHtmlTag(String str, String tag) {  
        String regxp = "<\\s*" + tag +"\\s+([^>]*)\\s*>";  
        Pattern pattern = Pattern.compile(regxp);  
        Matcher matcher =pattern.matcher(str);  
        StringBuffer sb = new StringBuffer();  
        boolean result1 = matcher.find();  
        while (result1) {  
            matcher.appendReplacement(sb, "");  
            result1 = matcher.find();  
        }  
        matcher.appendTail(sb);  
        return sb.toString();  
   }  
 
   /**   
     * 基本功能:替换指定的标签   
     * @param str 
     * @param beforeTag 
     * 要替换的标签 
     * @param tagAttrib 
     * 要替换的标签属性值 
     * @param startTag 
     * 新标签开始标记 
     * @param endTag 
     * 新标签结束标记 
     * @return String 
     * @如:替换img标签的src属性值为[img]属性值[/img] 
     */ 
   publicstaticString replaceHtmlTag(String str, String beforeTag,  
            String tagAttrib, String startTag,String endTag) {  
        String regxpForTag = "<\\s*"+ beforeTag +"\\s+([^>]*)\\s*>";  
        String regxpForTagAttrib = tagAttrib + "=\"([^\"]+)\"";  
        Pattern patternForTag = Pattern.compile(regxpForTag);  
        Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);  
        Matcher matcherForTag =patternForTag.matcher(str);  
        StringBuffer sb = new StringBuffer();  
        boolean result = matcherForTag.find();  
        while (result) {  
            StringBuffer sbreplace = new StringBuffer();  
            Matcher matcherForAttrib =patternForAttrib.matcher(matcherForTag  
                    .group(1));  
            if (matcherForAttrib.find()) {  
               matcherForAttrib.appendReplacement(sbreplace, startTag  
                       +matcherForAttrib.group(1) + endTag);  
            }  
            matcherForTag.appendReplacement(sb,sbreplace.toString());  
            result = matcherForTag.find();  
        }  
        matcherForTag.appendTail(sb);  
        return sb.toString();  
   }  
}

转自:http://www.cnblogs.com/devinzhang/archive/2012/05/09/2491619.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值