java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本篇文章主要介绍了 java 正则表达式过滤 html 标签, 现在分享给大家, 也给大家做个参考一起跟随小编过来看看吧
前段时间开发的时候要读取一篇文章的简介内容(也就是前 200 个字符), 使用了隐藏字段, 可能有人就要问了, 那后台也是可以截取字符的啊, 那是因为编辑器里面包含了 html 标签, 所以后台就需要处理 html 标签的正则表达式, 前些天上网搜了下, 发现有人写好的一个类, 给大家共享下, 不要闲小弟落伍了...
- 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("<");
- break;
- case '>':
- filtered.append(">");
- break;
- case '"':
- filtered.append(""");
- break;
- case '&':
- filtered.append(" & ");
- 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();
- }
- }'
来源: http://www.phperz.com/article/18/0215/359371.html