前段时间开发的时候要读取一篇文章的简介内容(也就是前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();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
更多java使用正则表达式过滤html标签。