服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|

服务器之家 - 编程语言 - JAVA教程 - java使用正则表达式过滤html标签

java使用正则表达式过滤html标签

2020-07-06 14:26Devin Zhang JAVA教程

本篇文章主要介绍了java正则表达式过滤html标签,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字符),使用了隐藏字段,可能有人就要问了,那后台也是可以截取字符的啊,那是因为编辑器里面包含了html标签,所以后台就需要处理html标签的正则表达式,前些天上网搜了下,发现有人写好的一个类,给大家共享下,不要闲小弟落伍了...

java" id="highlighter_761545">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
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("&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();
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/devinzhang/archive/2012/05/09/2491619.html

延伸 · 阅读

精彩推荐