`
啸笑天
  • 浏览: 3462183 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多

 

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

    }   

}

分享到:
评论

相关推荐

    java正则表达式过滤html标签

    java正则表达式过滤html标签是指使用java语言中的正则表达式来过滤html标签的操作。HtmlRegexpUtil这个工具类提供了多种过滤html标签的方法,包括过滤所有以"开头以"&gt;"结尾的标签、找出IMG标签、找出IMG标签的SRC...

    Java正则表达式入门 + HTMLParser使用详解

    Java正则表达式是编程语言Java中用于处理字符串的强大工具,它允许程序员通过简洁的语法进行复杂的文本匹配、查找、替换和验证。自从Java 1.4引入`java.util.regex`包以来,Java程序员就可以方便地使用正则表达式来...

    用正则表达式替换图片地址img标签

    总结来说,通过理解正则表达式的语法以及JavaScript的`replace`方法,我们可以高效地处理HTML字符串中的img标签,并实现src属性的批量替换。这种技术在处理动态生成的HTML或者数据转换时非常有用。在实际应用中,...

    java正则替换img标签中src值的方法

    正则表达式是 Java 中非常重要的一种技术,广泛应用于字符串处理、数据提取、格式验证等领域。在 HTML 处理中,正则替换 img 标签中 src 值的方法尤其重要,本文就将介绍一种使用 Java 实现的方法。 什么是正则...

    基于JAVA语言提取网站内部URL的算法

    在JAVA中,我们可以使用`java.util.regex`包来处理正则表达式,用于匹配和提取HTML中的URL。正则表达式可以精确地定义URL的模式,例如:`http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\\(\\),]|(?:%[0-9a-fA-F][0-9a-...

    解析网页利器组合(正则、jsoup、beanshell、dozer)资源

    在解析网页时,正则表达式常用于提取HTML标签中的特定内容,例如链接、日期、价格等。通过熟练掌握正则表达式的语法和用法,开发者可以高效地从复杂的HTML代码中抽取所需信息。 接着,Jsoup是一个Java库,专为处理...

    JSP留言本

    在本留言本中,可能使用了UBB代码解析器,将用户输入的UBB标签转换成对应的HTML标签,以显示格式化效果。此外,程序还支持表情,这可能是通过预定义的一系列表情代码,将其转换为对应的图片,增加互动性和趣味性。 ...

    JAVA实现手机归属地查询.docx

    正则表达式`"^* align=\"center\" class=tdc2&gt;(.*)$"`是用于从HTML源代码中提取特定格式的文本,即归属地信息所在的TD标签中的内容。`Pattern`和`Matcher`类是Java中处理正则表达式的工具,它们可以编译正则表达式并...

    Java抓取网页图片链接地址

    本示例代码利用了Java正则表达式与`java.util.regex`包中的`Pattern`和`Matcher`类来完成这一任务。 #### 示例代码详解 ##### 正则表达式 1. **匹配`&lt;img&gt;`标签**: ```java String regEx_img = "*src=(.*?)[^&gt;]...

    Java中替换HTML标签的方法代码

    在Java编程语言中,处理HTML标签是常见的需求,特别是在数据清洗、文本提取或者邮件处理等场景。本篇文章将深入探讨如何使用Java中的`String`类提供的`replaceAll()`方法来替换HTML标签。 首先,我们来看一下给出的...

    wap代码 html过滤器(java)

    1. **正则表达式匹配HTML标签**:使用`Pattern`类编译正则表达式,该表达式用于匹配所有的HTML标签和可能存在的自定义标记(如大括号包围的文本)。这里的关键是利用`Pattern.CASE_INSENSITIVE`标志来确保大小写不...

    java html串转换成文本串

    在这个例子中,`text`变量现在包含了去除了HTML标签的纯文本:"标题 这是内容。" 4. 处理特殊情况:如果需要更复杂的处理,比如保留某些标签的格式(如段落),可以使用`outerHtml()`方法结合正则表达式进行处理。...

    企业java工程师测试题

    innerHTML是符合W3C标准的属性,而innerText只适用于IE浏览器,因此,尽可能地去使用innerHTML,而少用innerText,如果要输出不含HTML标签的内容,可以使用innerHTML取得包含HTML标签的内容后,再用正则表达式去除...

    将html文本中所有的标签替换掉的方法

    如果只想替换特定类型的标签,如`&lt;p&gt;`和`&lt;img&gt;`,可以修改正则表达式为`(&lt;(?i)(p|img)[^]*/?&gt;)`。如果只需要替换`&lt;a&gt;`标签,则正则表达式应改为`(&lt;(?i)a[^]*/?&gt;)`。 需要注意的是,这种方法并不适用于...

    java爬虫(查成语应用程序)

    4. **正则表达式**:在某些情况下,可能需要使用正则表达式来进一步处理抓取到的数据,如提取特定格式的文本、去除HTML标签等。 5. **多线程与异步处理**:为了提高爬虫效率,可以使用多线程或者异步处理技术,比如...

    网页中文本框自校验的标签-input.zip

    以下是一些常见的`&lt;input&gt;`标签属性用于自校验: 1. **type**:定义输入类型,如`text`、`email`、`password`等。不同的类型会自动进行相应的校验,比如`email`会检查是否符合电子邮件格式。 2. **required**:...

    Html_Parser.zip_Parser_java parser

    在实际应用中,结合正则表达式和Xpath或CSS选择器,可以实现强大的网页数据提取能力。 总之,`Html_Parser.zip` 提供了一个第三方的Java HTML解析解决方案,包含了必要的源码、文档、库文件和许可信息,使得开发者...

    扫描本地页面文件.html或jsp,按照原目录结构,提取页面相关的js.css.img等

    这涉及到Java I/O流、文件系统操作、正则表达式、HTML解析库的使用等技能。 总的来说,这个工具涉及的知识点包括: 1. HTML和JSP基础知识 2. 文件系统操作(遍历目录,读写文件) 3. HTML解析(如使用Jsoup库) 4. ...

    基于JAVA的网络爬虫脚本语言,可以直接使用或用JAVA二次开发.zip

    理解HTML标签和属性,以及如何使用DOM解析器如Jsoup来提取数据,是编写爬虫的基本技能。 3. **正则表达式**:正则表达式用于匹配和提取字符串中的特定模式,常用于从HTML文本中提取所需信息。 4. **线程和并发**:...

Global site tag (gtag.js) - Google Analytics