java正则表达式过滤html标签(转)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java正则表达式过滤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("&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(); 
} 
}

---恢复内容结束---

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(); 
} 
}

 

以上是关于java正则表达式过滤html标签(转)的主要内容,如果未能解决你的问题,请参考以下文章

java正则表达式去除html标签

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

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

高级正则技巧PHP正则表达式过滤html标签属性(DEMO)

Python:使用正则去除HTML标签(转)

实例JS 正则表达式提取 html 中纯文本,去掉样式,其它标签