`
huibin
  • 浏览: 741106 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

网页标签过滤

 
阅读更多

package com.xcy.babyonline.common.utils;

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

/**
 * <p>
 * 
 * <p>
 * Copyright the original author or authors.
 * 
 * @author Tiger1102
 * @date 2011-4-27
 * @dateLastModified 2011-4-27
 */
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();
	}

}
 
分享到:
评论

相关推荐

    VB 网页标签提取与过滤

    VB 网页标签提取与过滤 过滤掉网页图片、脚本、多媒体对象等 提取图片、链接、mp3等

    java过滤html,css,js标签工具类(UnHtmlScript)

    java过滤html,css,js标签工具类(UnHtmlScript),抓取页面内容去除标签样式信息

    VB 正则过滤所有网页标签提取字符串.rar

    vb编写的通过正则过滤所有网页标签提取字符串,希望你喜欢。

    java过滤html代码

    通过正则表达式过滤到html中的标签,将内容保存下来

    PHP实现网页内容html标签补全和过滤的方法小结【2种方法】

    本文实例讲述了PHP实现网页内容html标签补全和过滤的方法。分享给大家供大家参考,具体如下: 如果你的网页内容的html标签显示不全,有些表格标签不完整而导致页面混乱,或者把你的内容之外的局部html页面给包含进去了...

    python 3.5实现检测路由器流量并写入txt的方法实例

    网页标签过滤,没有 多线程,也没有 文本处理,只有涉及到字符串截取 本地文本写入,有 这么低级的代码是因为这个路由器页面非常垃圾,用不到~~~,不过这样也适合初学者观看,当然了,后续会尝试添加更多功能 ...

    jQuery过滤HTML标签并高亮显示关键字的方法

    jQuery实现网页关键字过滤效果,将需要过滤的文字定义在JavaScript中,可定义多个,不过要修改JS代码为数组,这样可过滤出多个不同的关键字,本例只是为你演示一个基本的功能,更多过滤功能请自己挖掘吧。...

    ASP.NET 网页抓取WEB版

    “筛选同类标签”作用是用来过滤页面上同类定位标签,然后点击“测试列表定位” 三、“抓取信息标签”是指列表后页面中要制定抓取的信息容器型标签。(如果抓取整页信息请为空),然后点 击“开始抓取列表内容”。 ...

    图片保存能手批量保存网页图片

    6)4.0版本支持IE 7.0,要摘录多个网页标签中的某一个网页的图片,只需将网页标签切换到该网页再摘录即可。 7)4.6修改了在IE工具栏不显示图标的问题 8)4.7增加了按序号保存图片功能。可以指定图片文件的前缀。 9)4.8...

    移除HTML标签的正则表达式

    移除HTML标签的正则表达式,这里是asp版本,注意是看正则的写法,脚本之家以前也发布过类似的代码。

    ASP.NET网页抓取功能

    “筛选同类标签”作用是用来过滤页面上同类定位标签,然后点击“测试列表定位” 三、“抓取信息标签”是指列表后页面中要制定抓取的信息容器型标签。(如果抓取整页信息请为空),然后点 击“开始抓取列表内容”。 ...

    抓取网页的关键信息

    基于行分块函数的方法解决网页正文的提取,先爬取网页在经过正则的过滤标签,之后就是用的行分块函数。

    多功能过滤工具:uBlock

    主要语言:JavaScript 项目分类:[工具] 项目标签:[广告拦截] 推荐理由:一个广告过滤工具,它是一个具有一般性用途的过滤工具,屏蔽广告的...它是一个功能强大的浏览器扩展,可以帮助用户过滤网页上的不必要内容。

    care-filter:Chrome过滤器可将网页上的文字替换为“更好”的替换文字。 在care-tags.org主持人的帮助下创建的过滤器

    超级超级真棒护理标签过滤器 这种craaaaaazy过滤器会将各种单词和短语更改为care-tags:trade_mark:批准的版本。 打包为Chrome扩展程序。 前: 嘿,fam,有人走了,会和我一起吃早午餐吗? 大声笑! 还有对Fetty ...

    js过滤HTML标签以及空格的思路及代码

    代码如下:function setContent(str) {str = str.replace(/&lt;...测试的时候发现这段代码不能过滤掉网页中空格字符(即: )。于是自己又改造了一下: 代码如下:function removeHTMLTag(str) { str = str.replace

    基于DIV的主题抽取

    提出一种基于DIV标签树的网页主题信息抽取方法,首先根据DIV 标签把HTML文档解析成DIV森林,然后过滤掉DW标签树中的噪声结点并且建立STU-DIV模型 树,最后通过主题相关度分析和剪枝算法,剪掉与主题信息无关的DIV标签树...

    基于行块分布函数的通用网页正文抽取算法优化,Python实现+源代码+文档说明

    采用正则过滤掉ul、script、style、注释等内容,标记该内容为A,然后过滤所有标签,再标记该内容为B。然后定义k行为一个行块,去掉空格的长度为行块长度。将过滤掉标签的内容B进行行块长度统计,根据行块分布找出最...

Global site tag (gtag.js) - Google Analytics