java使用正则表达式过滤html标签
前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字符),使用了隐藏字段,可能有人就要问了,那后台也是可以截取字符的啊,那是因为编辑器里面包含了html标签,所以后台就需要处理html标签的正则表达式,前些天上网搜了下,发现有人写好的一个类,给大家共享下,不要闲小弟落伍了...
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/**
*<p>
*Title:HTML相关的正则表达式工具类
*</p>
*<p>
*Description:包括过滤HTML标记,转换HTML标记,替换特定HTML标记
*</p>
*<p>
*Copyright:Copyright(c)2006
*</p>
*
*@authorhejian
*@version1.0
*@createtime2006-10-16
*/
publicclassHtmlRegexpUtil{
privatefinalstaticStringregxpForHtml="<([^>]*)>";//过滤所有以<开头以>结尾的标签
privatefinalstaticStringregxpForImgTag="<\\s*img\\s+([^>]*)\\s*>";//找出IMG标签
privatefinalstaticStringregxpForImaTagSrcAttrib="src=\"([^\"]+)\"";//找出IMG标签的SRC属性
/**
*
*/
publicHtmlRegexpUtil(){
//TODOAuto-generatedconstructorstub
}
/**
*
*基本功能:替换标记以正常显示
*<p>
*
*@paraminput
*@returnString
*/
publicStringreplaceTag(Stringinput){
if(!hasSpecialChars(input)){
returninput;
}
StringBufferfiltered=newStringBuffer(input.length());
charc;
for(inti=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>
*
*@paraminput
*@returnboolean
*/
publicbooleanhasSpecialChars(Stringinput){
booleanflag=false;
if((input!=null)&&(input.length()>0)){
charc;
for(inti=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;
}
}
}
returnflag;
}
/**
*
*基本功能:过滤所有以"<"开头以">"结尾的标签
*<p>
*
*@paramstr
*@returnString
*/
publicstaticStringfilterHtml(Stringstr){
Patternpattern=Pattern.compile(regxpForHtml);
Matchermatcher=pattern.matcher(str);
StringBuffersb=newStringBuffer();
booleanresult1=matcher.find();
while(result1){
matcher.appendReplacement(sb,"");
result1=matcher.find();
}
matcher.appendTail(sb);
returnsb.toString();
}
/**
*
*基本功能:过滤指定标签
*<p>
*
*@paramstr
*@paramtag
*指定标签
*@returnString
*/
publicstaticStringfiterHtmlTag(Stringstr,Stringtag){
Stringregxp="<\\s*"+tag+"\\s+([^>]*)\\s*>";
Patternpattern=Pattern.compile(regxp);
Matchermatcher=pattern.matcher(str);
StringBuffersb=newStringBuffer();
booleanresult1=matcher.find();
while(result1){
matcher.appendReplacement(sb,"");
result1=matcher.find();
}
matcher.appendTail(sb);
returnsb.toString();
}
/**
*
*基本功能:替换指定的标签
*<p>
*
*@paramstr
*@parambeforeTag
*要替换的标签
*@paramtagAttrib
*要替换的标签属性值
*@paramstartTag
*新标签开始标记
*@paramendTag
*新标签结束标记
*@returnString
*@如:替换img标签的src属性值为[img]属性值[/img]
*/
publicstaticStringreplaceHtmlTag(Stringstr,StringbeforeTag,
StringtagAttrib,StringstartTag,StringendTag){
StringregxpForTag="<\\s*"+beforeTag+"\\s+([^>]*)\\s*>";
StringregxpForTagAttrib=tagAttrib+"=\"([^\"]+)\"";
PatternpatternForTag=Pattern.compile(regxpForTag);
PatternpatternForAttrib=Pattern.compile(regxpForTagAttrib);
MatchermatcherForTag=patternForTag.matcher(str);
StringBuffersb=newStringBuffer();
booleanresult=matcherForTag.find();
while(result){
StringBuffersbreplace=newStringBuffer();
MatchermatcherForAttrib=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);
returnsb.toString();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。