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

 

package com.ez;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ZYJ {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		String htmlStr = "<b><font www=\"red\" pp='oo'>aaaaa</font><font www=\"red\" pp='oo'>aaaaa</font></b> ";
		String htmlStr = "<b><a href='http://www.baby.com' pp='oo'/><a href =\"http://www.baby.com\" pp=\"o\">welcome</a></b> ";
		System.out.println("zyj  "+ZYJ.updateHtmlTag(htmlStr, "a", "href","http://www.redirect.com/xxx?url=" , "?xx=ss\""));

	}
	
	/**  
     * @param htmlStr  html文本  
     * @param searchTag  要修改的目标标签 
     * @param searchAttrib  目标标签中的属性 
     * @param newStr  修改值      
     */  
	public static String updateHtmlTag(String htmlStr, String searchTag,   
            String searchAttrib,String startStr , String endStr) {   
        String regxpForTag ="<\\s*" + searchTag + "\\s+([^>]*)\\s*>";    
        String regxpForTagAttrib = searchAttrib + "\\s*=\\s*[\"|']http://([^\"|']+)[\"|']";//"=[\"|']([^[\"|']]+)[\"|']";   
        Pattern patternForTag = Pattern.compile(regxpForTag);   
        Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);   
        Matcher matcherForTag = patternForTag.matcher(htmlStr);   
        StringBuffer sb = new StringBuffer();   
        boolean result = matcherForTag.find();   
        while (result) {   
            StringBuffer sbreplace = new StringBuffer("<"+searchTag +" "); 
            System.out.println(matcherForTag.group(1));
            Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag   
                    .group(1));   
            
            if (matcherForAttrib.find()) {
            	System.out.println("ll"+matcherForAttrib.group(1));
                matcherForAttrib.appendReplacement(sbreplace, searchAttrib+"=\"" +startStr   
                        + matcherForAttrib.group(1) + endStr);   
            }   
//            matcherForTag.appendReplacement(sb, sbreplace.toString());  
            matcherForAttrib.appendTail(sbreplace); 
			matcherForTag.appendReplacement(sb, sbreplace.toString()+">");
            result = matcherForTag.find();   
        }   
        matcherForTag.appendTail(sb);   
        return sb.toString();   
    }   
	
}

 参考:

 

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

    }   

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值