博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-正则表达式过滤字符串中的html标签
阅读量:4578 次
发布时间:2019-06-08

本文共 5402 字,大约阅读时间需要 18 分钟。

案例

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

* Title: HTML相关的正则表达式工具类 *

*

* Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记 *

*

* Copyright: Copyright (c) 2006 *

* * @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 } /** * * 基本功能:替换标记以正常显示 *

* * @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()); } /** * * 基本功能:判断标记是否存在 *

* * @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; } /** * * 基本功能:过滤所有以"<"开头以">"结尾的标签 *

* * @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(); } /** * * 基本功能:过滤指定标签 *

* * @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(); } /** * * 基本功能:替换指定的标签 *

* * @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(); } }

 

转载于:https://www.cnblogs.com/hwaggLee/p/4738723.html

你可能感兴趣的文章
指针数组和二维数组指针变量
查看>>
asp.net解决数据转换为DBNULL的问题
查看>>
window.location.href 放置在单独的JS文件中使用时问题
查看>>
Oracle 常用SQL技巧(转)
查看>>
11.15 个人总结
查看>>
IdentityServer4问题记录
查看>>
(私人收藏)[开发必备]最全JQuery离线快速查找手册(可查询可学习,带实例)...
查看>>
基于 Webpack 4 搭建 Vue 开发环境
查看>>
基于SpringBoot+MyBatis实现一套电商系统
查看>>
转:Android 监控网络状态http://developer.android.com/sdk/index.html#download
查看>>
DDD 之 Multiple Canonical Models
查看>>
领域驱动设计之model的关系及ef建模
查看>>
mininet指令详解
查看>>
JQuery UI dialog 弹窗实例及参数说明
查看>>
python-切片-知识整理
查看>>
word-->pdf
查看>>
webview加载地图所需要的设置
查看>>
《一起》个人进展——Day01
查看>>
如何成为Python高手
查看>>
C++智能指针
查看>>