zoukankan      html  css  js  c++  java
  • java-正则表达式过滤字符串中的html标签

    案例

    import java.util.regex.Matcher;   
    import java.util.regex.Pattern;   
      
    /**  
     * <p>  
     * Title: HTML相关的正则表达式工具类  
     * </p>  
     * <p>  
     * Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记  
     * </p>  
     * <p>  
     * Copyright: Copyright (c) 2006  
     * </p>  
     *   
     * @author hejian  
     * @version 1.0  
     * @createtime 2006-10-16  
     */  
      
    public class HtmlRegexpUtil {   
        private final static String regxpForHtml = "<([^>]*)>"; // 过滤所有以<开头以>结尾的标签   
      
        private final static String regxpForImgTag = "<\s*img\s+([^>]*)\s*>"; // 找出IMG标签   
      
        private final static String regxpForImaTagSrcAttrib = "src="([^"]+)""; // 找出IMG标签的SRC属性   
      
        /**  
         *   
         */  
        public HtmlRegexpUtil() {   
            // TODO Auto-generated constructor stub   
        }   
      
        /**  
         *   
         * 基本功能:替换标记以正常显示  
         * <p>  
         *   
         * @param input  
         * @return String  
         */  
        public String replaceTag(String input) {   
            if (!hasSpecialChars(input)) {   
                return input;   
            }   
            StringBuffer filtered = new StringBuffer(input.length());   
            char c;   
            for (int i = 0; i <= input.length() - 1; i++) {   
                c = input.charAt(i);   
                switch (c) {   
                case '<':   
                    filtered.append("&lt;");   
                    break;   
                case '>':   
                    filtered.append("&gt;");   
                    break;   
                case '"':   
                    filtered.append("&quot;");   
                    break;   
                case '&':   
                    filtered.append("&amp;");   
                    break;   
                default:   
                    filtered.append(c);   
                }   
      
            }   
            return (filtered.toString());   
        }   
      
        /**  
         *   
         * 基本功能:判断标记是否存在  
         * <p>  
         *   
         * @param input  
         * @return boolean  
         */  
        public boolean hasSpecialChars(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;   
        }   
      
        /**  
         *   
         * 基本功能:过滤所有以"<"开头以">"结尾的标签  
         * <p>  
         *   
         * @param str  
         * @return String  
         */  
        public static String 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();   
        }   
      
        /**  
         *   
         * 基本功能:过滤指定标签  
         * <p>  
         *   
         * @param str  
         * @param tag  
         *            指定标签  
         * @return String  
         */  
        public static String 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();   
        }   
      
        /**  
         *   
         * 基本功能:替换指定的标签  
         * <p>  
         *   
         * @param str  
         * @param beforeTag  
         *            要替换的标签  
         * @param tagAttrib  
         *            要替换的标签属性值  
         * @param startTag  
         *            新标签开始标记  
         * @param endTag  
         *            新标签结束标记  
         * @return String  
         * @如:替换img标签的src属性值为[img]属性值[/img]  
         */  
        public static String 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();   
        }   
    }

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4738723.html
Copyright © 2011-2022 走看看