最近在公司负责网络爬虫这块,需要过滤文本结果中的Html标签,研究了一下实现了该功能。
示例代码
package com.yulore.ex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.junit.Test;
public class HTMLFilterTest {
@Test
public void test01(){
String html = "8:00-17:00 周六、周日不休 <a href='http://www.123.com'>010-23456789</a>";
html = filterHTMLTag(html);
System.out.println(html);
}
@Test
public void test02(){
StringBuffer htmlStr = new StringBuffer();
htmlStr.append("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>")
.append("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en'><head><title>aaa</title><mce:script type='text/javascript'></mce:script>")
.append("<link href='static_files/help.css' mce_href='static_files/help.css' rel='stylesheet' type='text/css' media='all' />")
.append("</head><body><ul><li>XXXX</li></ul></body></html>");
String html = filterHtml(htmlStr.toString());
System.out.println(html);
}
/**
* 过滤文本中的所有 html标签,过滤所有的空格并且只保留第一个空格
* @param html
* @return
*/
private String filterHTMLTag(String html) {
if (html == null || "".equals(html)) {
return "";
}
html = html.replaceAll("<[\\s\\S]*?>", ""); //过滤html标签
html = html.replaceAll(" ", ""); //过滤
html = html.replaceAll("\\s+", " "); //过滤空格,并保留一个空格
return html;
}
/**
* 过滤文本中的所有 html标签
* @param htmlStr
* @return
*/
private String filterHtml(String htmlStr) {
String regEx_script = "<[//s]*?script[^>]*?>[//s//S]*?<[//s]*?///[//s]*?script[//s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[//s//S]*?<///script>
String regEx_style = "<[//s]*?style[^>]*?>[//s//S]*?<[//s]*?///[//s]*?style[//s]*?>"; // 定义style的正则表达式{或<style[^>]*?>[//s//S]*?<///style>
String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
String regEx_html1 = "<[^>]+";
Pattern p_script = Pattern.compile(regEx_script,
Pattern.CASE_INSENSITIVE);
Matcher m_script = p_script.matcher(htmlStr);
htmlStr = m_script.replaceAll(""); // 过滤script标签
Pattern p_style = Pattern
.compile(regEx_style, Pattern.CASE_INSENSITIVE);
Matcher m_style = p_style.matcher(htmlStr);
htmlStr = m_style.replaceAll(""); // 过滤style标签
Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
Matcher m_html = p_html.matcher(htmlStr);
htmlStr = m_html.replaceAll(""); // 过滤html标签
Pattern p_html1 = Pattern
.compile(regEx_html1, Pattern.CASE_INSENSITIVE);
Matcher m_html1 = p_html1.matcher(htmlStr);
htmlStr = m_html1.replaceAll(""); // 过滤html标签
return htmlStr;
}
}
OK,大功告成啦!!!