public class HTMLBean<T> {
private String eleName;//元素名称
private int eleCount;//元素个数
private String result;//元素值
private Map<String,T> attribute;//元素属性
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Map<String, T> getAttribute() {
return attribute;
}
public void setAttribute(Map<String, T> attribute) {
this.attribute = attribute;
}
public String getEleName() {
return eleName;
}
public void setEleName(String eleName) {
this.eleName = eleName;
}
public int getEleCount() {
return eleCount;
}
public void setEleCount(int eleCount) {
this.eleCount = eleCount;
}
}
public interface ElementFilter<T> {
boolean filter(HTMLBean<T> bean);
}
public class HtmlUtil {
//patternString1 = "<(\\w+)\\s+?(type\\s*?=[^>]+)?\\s+?(src\\s*?=[^>]+)?>(.*?)</\\1>";
private static final String patternString = "<(\\w+)\\s+(\\w+\\s*=[^>]+)?>(.*?)</\\1>";
private static final Pattern pattern = Pattern.compile(patternString,Pattern.DOTALL);
private static final String patternString1 = "(\\w+?)=[\"|\']?(.*?)[\"|\']?\\s+?";
private static final Pattern pattern1 = Pattern.compile(patternString1,Pattern.DOTALL);
public static HTMLBean<String> getHTMLBean(String content){
HTMLBean<String> bean = null;
Matcher matcher = pattern.matcher(content);;
if(matcher!=null && matcher.find()) {
bean = new HTMLBean<String>();
bean.setEleName(matcher.group(1));
String result = matcher.group(2);
bean.setResult(matcher.group(3));
HashMap<String,String> attrMap = new HashMap<String, String>();
result = result + " ";
Matcher m = pattern1.matcher(result);
int len = 0;
while(m!=null && m.find())
{
attrMap.put(m.group(1),m.group(2));
len = len + 1;
}
//String[] attr = result.split("\\s+?\\w+?=");
/* int len = attr.length;
for (int i = 0; i < len; i++) {
String temp = attr[i].replaceAll("\"|'", "");
int index = temp.indexOf("=");
if (index > -1) {
attrMap.put(temp.substring(0, index),temp.substring(index + 1, temp.length()));
}
else {
attrMap.put(temp,"");
}
//String[] temp = attr[i].split("=\\*?[\"|']");
//System.out.println(attr[i]);
//attrMap.put(temp[0],temp.length > 1 ? temp[1] : "");
}*/
bean.setAttribute(attrMap);
bean.setEleCount(len);
}
return bean;
}
public static List<HTMLBean<String>> getHTMLBeanList(String path,
ElementFilter<String> filter) throws IOException {
LinkedList<HTMLBean<String>> link = new LinkedList<HTMLBean<String>>();
InputStream fs = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(fs, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String r = null;
while ((r = br.readLine()) != null) {
HTMLBean<String> bean = getHTMLBean(r);
if (bean != null && filter.filter(bean)) {
link.add(bean);
}
}
return link;
}
@Test
public void getHTMLBeanContentList_test() throws IOException{
String p = "D:\\Users\\lewking\\Desktop\\test.html";
List<HTMLBean<String>> link =
getHTMLBeanList(p,new ElementFilter<String>(){
@Override
public boolean filter(HTMLBean<String> bean) {
//过滤 A 标签
return "a".equals(bean.getEleName().toLowerCase());
}
});
System.out.println("解析完成..............");
for(HTMLBean<String> bean : link){
System.out.println("< " + bean.getEleName() +" >");
System.out.println("%%%%%%%%: " + bean.getResult());
Map<String,String> m = bean.getAttribute();
for(Iterator<Map.Entry<String, String>> entry = m.entrySet().iterator();entry.hasNext();){
Entry<String, String> e = entry.next();
System.out.println(e.getKey() +" : "+ e.getValue());
}
}
}
}
分享到:
相关推荐
"访问资源之家.html"可能是提供给用户的一个链接或指南,引导他们获取更多关于正则表达式或者其他相关资源的信息,如教程、文档或工具。 "English.ini"、"ChineseGB.ini"和"ChineseBIG5.ini"是配置文件,分别对应...
4. **处理HTML注释**:虽然不是JavaScript的原生特性,但在解析HTML字符串时,也需要考虑`<!--`到`-->`的HTML注释: ```javascript cleanedCode = cleanedCode.replace(/<!--[\s\S]*?-->/g, ''); ``` 结合以上...
- **文本编辑器**:如Notepad++, Sublime Text, Visual Studio Code等支持正则表达式的查找和替换功能。 4. **正则表达式测试工具** - **正则测试.exe**:提供的这个可执行文件可能是一个正则表达式测试工具,...
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它...
function mask_HTMLCode(strInput) { var myReg = /<(\w+)>/; return strInput.replace(myReg, "<$1>"); } ``` 该函数用于屏蔽HTML代码,防止HTML代码被浏览器解析执行,从而起到保护作用。 ##### E-mail...
### JavaScript中的正则表达式应用详解 #### 一、正则表达式简介 在JavaScript中,正则表达式(Regular Expression)是一种...无论是简单的字符串查找还是复杂的文本解析任务,正则表达式都是必不可少的工具之一。
可以使用`requests`库发送HTTP请求获取HTML,或者使用`BeautifulSoup`解析HTML以提取所需内容。例如: ```python import requests from bs4 import BeautifulSoup def get_html(url): response = requests.get...
### JavaScript正则表达式之`search()`方法详解 #### 一、引言 在JavaScript编程中,正则表达式是一种非常强大的工具,用于处理字符串模式匹配、搜索与替换等操作。`search()`方法是其中一个非常实用的功能,它...
接着,使用`Pattern.compile()`方法编译这个正则表达式,并创建一个`Matcher`对象`m`,对`htmlCode`进行匹配。在`while`循环中,`m.find()`会查找下一个匹配项,如果找到,则通过`m.group()`获取匹配到的子串。 `...
Java正则表达式是Java语言中用于处理字符串的强大工具,它允许我们通过模式匹配和查找来解析、验证或提取文本。在本文中,我们将重点讨论如何在Java中使用正则表达式来抓取网页中的电子邮件地址以及进行代码统计。 ...
本资源是《Python大数据分析&人工智能教程》系列课程中关于页面解析的深入指南,专注于Xpath和正则表达式的应用。它不仅提供了详尽的文档资料和源码,还包含了学习思维导图,旨在帮助学习者掌握网络爬虫中页面解析的...
- 这些代码可能包含对上述正则表达式的应用,演示了如何在ASP.NET环境中读取HTML内容,解析并提取所需信息。 学习这个项目可以帮助开发者深入了解正则表达式在处理HTML时的灵活性和效率,同时也能掌握如何在ASP...
`javascript-regular-expressions-book` 这本书的源代码可能包含了各种正则表达式的实例、解析和高级用法,比如回溯、预查、环视、递归模式等。通过阅读源代码,开发者可以深入了解正则表达式的内部工作原理,学习...
- **正则表达式解析**: - `'匹配起始尖括号 `。 - `\s*a\s`: 匹配空格后紧跟字母`a`,然后跟一个或多个空格,即`<a>`标签。 - `.*?href\s*=\s*`: 匹配`href`属性之前的所有字符,包括空格等。 - `([\"\'])?`: ...
在爬虫中,我们经常使用正则表达式来匹配和提取目标数据,比如网址、电话号码、邮箱等特定格式的信息。理解正则表达式的基本语法和常用元字符是爬虫开发者必备的技能。 再者,"网页解析"是爬虫的重要环节。通常,...
同时,正则表达式也可能用于解析ubb代码,这是一种简化HTML的标记语言,使得用户可以在留言中插入格式化的文本,如加粗、斜体等。 **UBB代码和表情** UBB(UltraBB Code)是一种轻量级的标记语言,类似于BBCode,...
本项目"javaGetWeather.zip"就是这样一个实例,它通过正则表达式从网页中抓取并解析天气预报数据。下面我们将深入探讨这个主题。 首先,我们来理解"javaGetWeather.zip"的核心功能。这个压缩包包含了一个名为...
在应用正则表达式后,最终得到的字符串`originCode`应该是不包含任何JavaScript、CSS和HTML标签的纯文本内容,即网页上可见的文本。 需要注意的是,由于HTML的复杂性,简单的正则表达式可能无法完美匹配所有情况。...