java正则表达式处理HTML标签

package com.jrj.stock.common.util;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * html标签处理类
 * @author TonsonMiao
 */

public class HtmlTagUtil {

	/**
	 * 获取指定标签的第一次出现的内容
	 * @param target
	 * @param tag
	 * @return
	 */
	public String getTagContentFirst(String target, String tag) {
		String str = "<[" + tag.toUpperCase() + "," + tag.toLowerCase()
				+ "].*?>(.*?)</[" + tag.toUpperCase() + "," + tag.toLowerCase()
				+ "]>";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(target);
		if (m.find()) {
			return m.group();
		} else {
			return null;
		}
	}

	/**
	 * 获取所有指定标签的内容
	 * @param target
	 * @param tag
	 * @return
	 */
	public List<String> getTagContentAll(String target, String tag) {
		String str = "<[" + tag.toUpperCase() + "," + tag.toLowerCase()
				+ "].*?>(.*?)</[" + tag.toUpperCase() + "," + tag.toLowerCase()
				+ "]>";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(target);
		List<String> list = new ArrayList<String>();
		while (m.find()) {
			list.add(m.group(1));
		}
		return list;
	}

	/**
	 * 清除指定标签
	 * @param target
	 * @param tag
	 * @return
	 */
	public String clearTag(String target, String tag) {
		String str = "<[" + tag.toUpperCase() + "," + tag.toLowerCase()
				+ "].*?>(.*?)</[" + tag.toUpperCase() + "," + tag.toLowerCase()
				+ "]>";
		Pattern p = Pattern.compile(str);
		Matcher m = p.matcher(target);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(sb, "");
		}
		m.appendTail(sb);
		return sb.toString();
	}

	/**
	 * 清除指定标签的标签名
	 * @param target
	 * @param tag
	 * @return
	 */
	public String clearTagName(String target, String tag) {
		String str = "<" + tag.toUpperCase() + ".*?>(.*?)</"
				+ tag.toUpperCase() + ">";
		boolean doubleFlag = true;
		if (tag.equalsIgnoreCase("input") || tag.equalsIgnoreCase("img")) {
			str = "<" + tag.toUpperCase() + "(.*?)>";
			doubleFlag = false;
		}
		Pattern p = Pattern.compile(str, Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher(target);
		StringBuffer sb = new StringBuffer();
		boolean flag = false;
		while (sb.length() == 0 || flag) {
			sb = new StringBuffer();
			while (flag || m.find()) {
				m.appendReplacement(sb, "");
				if (doubleFlag)
					sb.append(m.group(1));
				flag = false;
			}
			m.appendTail(sb);
			flag = (m = p.matcher(sb.toString())).find();
		}

		return sb.toString();
	}

	/**
	 * 清除所有标签名
	 * @param target
	 * @return
	 */
	public String clearTagNameAll(String target) {
		String str = "<([^>]*)>";
		Pattern p = Pattern.compile(str, Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher(target);
		StringBuffer sb = new StringBuffer();
		while (m.find()) {
			m.appendReplacement(sb, "");
		}
		m.appendTail(sb);

		return sb.toString();
	}

	/**
	 * 列出出现过的标签名
	 * @param target
	 * @return
	 */
	public Set<String> listTagNameAll(String target) {
		String str = "<\\s*[a-zA-Z]+";
		String name = "[a-zA-Z]+";
		Pattern p = Pattern.compile(str, Pattern.CASE_INSENSITIVE);
		Pattern pname = Pattern.compile(name, Pattern.CASE_INSENSITIVE);
		Matcher m = p.matcher(target);
		Set<String> list = new HashSet<String>();
		while (m.find()) {
			Matcher mn = pname.matcher(m.group());
			mn.find();
			list.add(mn.group().toUpperCase());
		}

		return list;
	}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值