java正则表达式修改html标签中属性


Java代码   收藏代码
  1. package com.ez;  
  2.   
  3. import java.util.regex.Matcher;  
  4. import java.util.regex.Pattern;  
  5.   
  6. public class ZYJ {  
  7.   
  8.     /** 
  9.      * @param args 
  10.      */  
  11.     public static void main(String[] args) {  
  12.         // TODO Auto-generated method stub  
  13. //      String htmlStr = "<b><font www=\"red\" pp='oo'>aaaaa</font><font www=\"red\" pp='oo'>aaaaa</font></b> ";  
  14.         String htmlStr = "<b><a href='http://www.baby.com' pp='oo'/><a href =\"http://www.baby.com\" pp=\"o\">welcome</a></b> ";  
  15.         System.out.println("zyj  "+ZYJ.updateHtmlTag(htmlStr, "a""href","http://www.redirect.com/xxx?url=" , "?xx=ss\""));  
  16.   
  17.     }  
  18.       
  19.     /**   
  20.      * @param htmlStr  html文本   
  21.      * @param searchTag  要修改的目标标签  
  22.      * @param searchAttrib  目标标签中的属性  
  23.      * @param newStr  修改值       
  24.      */    
  25.     public static String updateHtmlTag(String htmlStr, String searchTag,     
  26.             String searchAttrib,String startStr , String endStr) {     
  27.         String regxpForTag ="<\\s*" + searchTag + "\\s+([^>]*)\\s*>";      
  28.         String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']http://([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']";     
  29.         Pattern patternForTag = Pattern.compile(regxpForTag);     
  30.         Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);     
  31.         Matcher matcherForTag = patternForTag.matcher(htmlStr);     
  32.         StringBuffer sb = new StringBuffer();     
  33.         boolean result = matcherForTag.find();     
  34.         while (result) {     
  35.             StringBuffer sbreplace = new StringBuffer("<"+searchTag +" ");   
  36.             System.out.println(matcherForTag.group(1));  
  37.             Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag     
  38.                     .group(1));     
  39.               
  40.             if (matcherForAttrib.find()) {  
  41.                 System.out.println("ll"+matcherForAttrib.group(1));  
  42.                 matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"" +startStr     
  43.                         + matcherForAttrib.group(1) + endStr);     
  44.             }     
  45. //            matcherForTag.appendReplacement(sb, sbreplace.toString());    
  46.             matcherForAttrib.appendTail(sbreplace);   
  47.             matcherForTag.appendReplacement(sb, sbreplace.toString()+">");  
  48.             result = matcherForTag.find();     
  49.         }     
  50.         matcherForTag.appendTail(sb);     
  51.         return sb.toString();     
  52.     }     
  53.       
  54. }  

 参考:

 

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();   

    }   

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值