`
lewking
  • 浏览: 9665 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

正则表达式解析HTML,code

    博客分类:
  • code
 
阅读更多
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"是配置文件,分别对应...

    正则表达式系统教程

    - **文本编辑器**:如Notepad++, Sublime Text, Visual Studio Code等支持正则表达式的查找和替换功能。 4. **正则表达式测试工具** - **正则测试.exe**:提供的这个可执行文件可能是一个正则表达式测试工具,...

    JavaScript--正则表达式

    function mask_HTMLCode(strInput) { var myReg = /&lt;(\w+)&gt;/; return strInput.replace(myReg, "&lt;$1&gt;"); } ``` 该函数用于屏蔽HTML代码,防止HTML代码被浏览器解析执行,从而起到保护作用。 ##### E-mail...

    js常用的正则表达式

    ### JavaScript中的正则表达式应用详解 #### 一、正则表达式简介 在JavaScript中,正则表达式(Regular Expression)是一种...无论是简单的字符串查找还是复杂的文本解析任务,正则表达式都是必不可少的工具之一。

    正则表达式应用

    可以使用`requests`库发送HTTP请求获取HTML,或者使用`BeautifulSoup`解析HTML以提取所需内容。例如: ```python import requests from bs4 import BeautifulSoup def get_html(url): response = requests.get...

    javascript执行eval函数时利用正则表达式去掉回车符换行符和注释

    4. **处理HTML注释**:虽然不是JavaScript的原生特性,但在解析HTML字符串时,也需要考虑`&lt;!--`到`--&gt;`的HTML注释: ```javascript cleanedCode = cleanedCode.replace(/&lt;!--[\s\S]*?--&gt;/g, ''); ``` 结合以上...

    javascript正则表达式之search()用法实例.docx

    ### JavaScript正则表达式之`search()`方法详解 #### 一、引言 在JavaScript编程中,正则表达式是一种非常强大的工具,用于处理字符串模式匹配、搜索与替换等操作。`search()`方法是其中一个非常实用的功能,它...

    Java正则表达式放心使用

    ### Java正则表达式放心使用 #### 概述 本文主要介绍了Java中常用的正则表达式,这些表达式被广泛应用于字符串处理、表单验证等多个场景。正则表达式是进行模式匹配的强大工具,能够帮助开发者高效地完成各种任务...

    Java正则表达式使用

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许我们通过模式匹配和查找来解析、验证或提取文本。在本文中,我们将重点讨论如何在Java中使用正则表达式来抓取网页中的电子邮件地址以及进行代码统计。 ...

    ASPNETStripHtmlCode

    - 这些代码可能包含对上述正则表达式的应用,演示了如何在ASP.NET环境中读取HTML内容,解析并提取所需信息。 学习这个项目可以帮助开发者深入了解正则表达式在处理HTML时的灵活性和效率,同时也能掌握如何在ASP...

    Java中使用正则表达式获取网页中所有图片的路径

    接着,使用`Pattern.compile()`方法编译这个正则表达式,并创建一个`Matcher`对象`m`,对`htmlCode`进行匹配。在`while`循环中,`m.find()`会查找下一个匹配项,如果找到,则通过`m.group()`获取匹配到的子串。 `...

    javascript-regular-expressions-book:boo JavScript正则表达式的源代码-java source code

    `javascript-regular-expressions-book` 这本书的源代码可能包含了各种正则表达式的实例、解析和高级用法,比如回溯、预查、环视、递归模式等。通过阅读源代码,开发者可以深入了解正则表达式的内部工作原理,学习...

    php 正则表达式提取网页超级链接url的函数

    - **正则表达式解析**: - `'匹配起始尖括号 `。 - `\s*a\s`: 匹配空格后紧跟字母`a`,然后跟一个或多个空格,即`&lt;a&gt;`标签。 - `.*?href\s*=\s*`: 匹配`href`属性之前的所有字符,包括空格等。 - `([\"\'])?`: ...

    爬虫案例和源码 code.rar包含源代码,文本,和爬取的数据

    在爬虫中,我们经常使用正则表达式来匹配和提取目标数据,比如网址、电话号码、邮箱等特定格式的信息。理解正则表达式的基本语法和常用元字符是爬虫开发者必备的技能。 再者,"网页解析"是爬虫的重要环节。通常,...

    JSP留言本

    同时,正则表达式也可能用于解析ubb代码,这是一种简化HTML的标记语言,使得用户可以在留言中插入格式化的文本,如加粗、斜体等。 **UBB代码和表情** UBB(UltraBB Code)是一种轻量级的标记语言,类似于BBCode,...

    javaGetWeather.zip_天气_天气信息获取_天气预报

    本项目"javaGetWeather.zip"就是这样一个实例,它通过正则表达式从网页中抓取并解析天气预报数据。下面我们将深入探讨这个主题。 首先,我们来理解"javaGetWeather.zip"的核心功能。这个压缩包包含了一个名为...

    asp只采集网站可见文本的正则

    在应用正则表达式后,最终得到的字符串`originCode`应该是不包含任何JavaScript、CSS和HTML标签的纯文本内容,即网页上可见的文本。 需要注意的是,由于HTML的复杂性,简单的正则表达式可能无法完美匹配所有情况。...

    java代码-正则去除HTML代码中的注释信息

    这个任务可以通过使用正则表达式来实现。正则表达式是模式匹配的强大工具,可以用来查找、替换或提取符合特定规则的文本。 在Java中,我们可以使用`java.util.regex`包提供的`Pattern`和`Matcher`类来执行正则...

Global site tag (gtag.js) - Google Analytics