案例

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;
  3.  
  4. /**
  5. * <p>
  6. * Title: HTML相关的正则表达式工具类
  7. * </p>
  8. * <p>
  9. * Description: 包括过滤HTML标记,转换HTML标记,替换特定HTML标记
  10. * </p>
  11. * <p>
  12. * Copyright: Copyright (c) 2006
  13. * </p>
  14. *
  15. * @author hejian
  16. * @version 1.0
  17. * @createtime 2006-10-16
  18. */
  19.  
  20. public class HtmlRegexpUtil {
  21. private final static String regxpForHtml = "<([^>]*)>"; // 过滤所有以<开头以>结尾的标签
  22.  
  23. private final static String regxpForImgTag = "<\\s*img\\s+([^>]*)\\s*>"; // 找出IMG标签
  24.  
  25. private final static String regxpForImaTagSrcAttrib = "src=\"([^\"]+)\""; // 找出IMG标签的SRC属性
  26.  
  27. /**
  28. *
  29. */
  30. public HtmlRegexpUtil() {
  31. // TODO Auto-generated constructor stub
  32. }
  33.  
  34. /**
  35. *
  36. * 基本功能:替换标记以正常显示
  37. * <p>
  38. *
  39. * @param input
  40. * @return String
  41. */
  42. public String replaceTag(String input) {
  43. if (!hasSpecialChars(input)) {
  44. return input;
  45. }
  46. StringBuffer filtered = new StringBuffer(input.length());
  47. char c;
  48. for (int i = 0; i <= input.length() - 1; i++) {
  49. c = input.charAt(i);
  50. switch (c) {
  51. case '<':
  52. filtered.append("&lt;");
  53. break;
  54. case '>':
  55. filtered.append("&gt;");
  56. break;
  57. case '"':
  58. filtered.append("&quot;");
  59. break;
  60. case '&':
  61. filtered.append("&amp;");
  62. break;
  63. default:
  64. filtered.append(c);
  65. }
  66.  
  67. }
  68. return (filtered.toString());
  69. }
  70.  
  71. /**
  72. *
  73. * 基本功能:判断标记是否存在
  74. * <p>
  75. *
  76. * @param input
  77. * @return boolean
  78. */
  79. public boolean hasSpecialChars(String input) {
  80. boolean flag = false;
  81. if ((input != null) && (input.length() > 0)) {
  82. char c;
  83. for (int i = 0; i <= input.length() - 1; i++) {
  84. c = input.charAt(i);
  85. switch (c) {
  86. case '>':
  87. flag = true;
  88. break;
  89. case '<':
  90. flag = true;
  91. break;
  92. case '"':
  93. flag = true;
  94. break;
  95. case '&':
  96. flag = true;
  97. break;
  98. }
  99. }
  100. }
  101. return flag;
  102. }
  103.  
  104. /**
  105. *
  106. * 基本功能:过滤所有以"<"开头以">"结尾的标签
  107. * <p>
  108. *
  109. * @param str
  110. * @return String
  111. */
  112. public static String filterHtml(String str) {
  113. Pattern pattern = Pattern.compile(regxpForHtml);
  114. Matcher matcher = pattern.matcher(str);
  115. StringBuffer sb = new StringBuffer();
  116. boolean result1 = matcher.find();
  117. while (result1) {
  118. matcher.appendReplacement(sb, "");
  119. result1 = matcher.find();
  120. }
  121. matcher.appendTail(sb);
  122. return sb.toString();
  123. }
  124.  
  125. /**
  126. *
  127. * 基本功能:过滤指定标签
  128. * <p>
  129. *
  130. * @param str
  131. * @param tag
  132. * 指定标签
  133. * @return String
  134. */
  135. public static String fiterHtmlTag(String str, String tag) {
  136. String regxp = "<\\s*" + tag + "\\s+([^>]*)\\s*>";
  137. Pattern pattern = Pattern.compile(regxp);
  138. Matcher matcher = pattern.matcher(str);
  139. StringBuffer sb = new StringBuffer();
  140. boolean result1 = matcher.find();
  141. while (result1) {
  142. matcher.appendReplacement(sb, "");
  143. result1 = matcher.find();
  144. }
  145. matcher.appendTail(sb);
  146. return sb.toString();
  147. }
  148.  
  149. /**
  150. *
  151. * 基本功能:替换指定的标签
  152. * <p>
  153. *
  154. * @param str
  155. * @param beforeTag
  156. * 要替换的标签
  157. * @param tagAttrib
  158. * 要替换的标签属性值
  159. * @param startTag
  160. * 新标签开始标记
  161. * @param endTag
  162. * 新标签结束标记
  163. * @return String
  164. * @如:替换img标签的src属性值为[img]属性值[/img]
  165. */
  166. public static String replaceHtmlTag(String str, String beforeTag,
  167. String tagAttrib, String startTag, String endTag) {
  168. String regxpForTag = "<\\s*" + beforeTag + "\\s+([^>]*)\\s*>";
  169. String regxpForTagAttrib = tagAttrib + "=\"([^\"]+)\"";
  170. Pattern patternForTag = Pattern.compile(regxpForTag);
  171. Pattern patternForAttrib = Pattern.compile(regxpForTagAttrib);
  172. Matcher matcherForTag = patternForTag.matcher(str);
  173. StringBuffer sb = new StringBuffer();
  174. boolean result = matcherForTag.find();
  175. while (result) {
  176. StringBuffer sbreplace = new StringBuffer();
  177. Matcher matcherForAttrib = patternForAttrib.matcher(matcherForTag
  178. .group(1));
  179. if (matcherForAttrib.find()) {
  180. matcherForAttrib.appendReplacement(sbreplace, startTag
  181. + matcherForAttrib.group(1) + endTag);
  182. }
  183. matcherForTag.appendReplacement(sb, sbreplace.toString());
  184. result = matcherForTag.find();
  185. }
  186. matcherForTag.appendTail(sb);
  187. return sb.toString();
  188. }
  189. }

java-正则表达式过滤字符串中的html标签的更多相关文章

  1. 正则表达式替换字符串中的html标签

    正则表达式替换字符串中的html标签 ··· var newStr = str.replace(/<[^>]+>/g, ''); ···

  2. 过滤字符串中的html标签

    C#中,我们有时需要过滤掉字符串中的部分html标签,以下是一些简单的html标签过滤方法,使用的主要方式是正则表达式 public static string ClearHtml(string ht ...

  3. 正则表达式获取字符串中的img标签中的url链接

    废话不多说直接看代码 JavaScript中的代码: var re = /src=\"([^\"]*?)\"/i; var arr = str.match(re); if ...

  4. 使用Java正则表达式提取字符串中的数字一例

    直接上代码: String reg = "\\D+(\\d+)$"; //提取字符串末尾的数字:封妖塔守卫71 == >> 71 String s = monster. ...

  5. Java过滤掉字符串中的html标签、style标签、script标签

    使用正则表达式 import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLSpirit{ pub ...

  6. java正则表达式去除html中所有的标签和特殊HTML字符(以&开头的)

    来源于:https://www.androiddev.net/java%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8E%BB%E9%99%A4ht ...

  7. js过滤字符串中的html标签

    var str = 'add<a>daad</a><p>fsdada</p>' str.replace(/<[^<>]+>/g, ...

  8. Java中用正则表达式截取字符串中

    Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串.比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市.正则表达式为() A ".*?(?=\\()" ...

  9. Java之正则表达式来判断字符串中是否包含字母

    /** * 使用正则表达式来判断字符串中是否包含字母 * @param str 待检验的字符串 * @return 返回是否包含 * true: 包含字母 ;false 不包含字母 */ public ...

随机推荐

  1. WAMP中phpMyAdmin登陆不了问题的解决方法

    WAMP中phpMyAdmin登陆不了问题的解决方法

  2. StringBuffer和StringBuilder的区别

    StringBuffer和StringBuilder的区别 StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在 ...

  3. qau-国庆七天乐——A

    A - Who's in the Middle //先吐槽一波vj,不知道怎么回事,bits/stdc++.h不能用了...坑爹 7225007 upstar A Compile Error     ...

  4. Javascript Window的属性

    Window的属性 属性 描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dialogArguments 设置或获取传递给模 ...

  5. 原创:Eclipse 上网代理设置(亲测有效)

    直接上图:

  6. QuartzCore笔记

    Quartz Core 图层编程 一.添加 Quartz Core 框架 要使用 Quartz Core 框架,你需要将其添加到你的工程中 . 然后 #import <Quartz Core/Q ...

  7. IntelliJ IDEA 打包可运行的 JAR

    ## 构建说明 创建Artifest任务 * File -> Project Structure -> Artifacts -> + JAR* 选择 From module with ...

  8. 添加Distributor失败

    上周做了一个case,客户无法为SQL Server instance配置remote distributor. 下面分享一下排查问题的过程,希望对您排查类似的问题所有帮助. 客户的环境中的SQL S ...

  9. Html5 Egret游戏开发 成语大挑战(四)选关界面

    通过前面的开始界面基本上了解了eui的使用方法,可以简单快速的制作一个UI界面,本篇使用第二界面选关界面展示更为难一点的代码控制,来展现关卡地图的内容,请确保素材和资源完整,可以在前面的教程中找到下载 ...

  10. [转]WampServer localhost 图标不显示解决办法

    FROM : http://blog.warmcolor.net/2011/11/03/wampserver-localhost-%E5%9B%BE%E6%A0%87%E4%B8%8D%E6%98%B ...