前段時間開發(fā)的時候要讀取一篇文章的簡介內(nèi)容(也就是前200個字符),使用了隱藏字段,可能有人就要問了,那后臺也是可以截取字符的啊,那是因為編輯器里面包含了html標簽,所以后臺就需要處理html標簽的正則表達式,前些天上網(wǎng)搜了下,發(fā)現(xiàn)有人寫好的一個類,給大家共享下,不要閑小弟落伍了...
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相關(guān)的正則表達式工具類 * </p> * <p> * Description: 包括過濾HTML標記,轉(zhuǎn)換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 = "<([^>]*)>" ; // 過濾所有以<開頭以>結(jié)尾的標簽 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; } /** * * 基本功能:過濾所有以"<"開頭以">"結(jié)尾的標簽 * <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 * 新標簽結(jié)束標記 * @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(); } } |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/devinzhang/archive/2012/05/09/2491619.html