`
varsoft
  • 浏览: 2438233 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

解析HTML正则表达式

阅读更多

//把所有HTML标签找出来

哈哈,继 昨天的那个正则表达式之后又写了一个更长的Regular Expression,全长527,是用于查找出所有的XHTML/HTML的标记外面的所有空格,并将之转换为 的。 希望这个能够解决dudu提的一个cnblogs的bug:)即使不能解决问题也算是对System.Text.RegularExpression.Regex的一个练笔了:)

(?:(?:\<(?:Style)(?:\s+(?:[\w-]+)(?:=(?:[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:Style)\>))|(?:(?:\<(?:script)(?:\s+(?:[\w-]+)(?:=(?:[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?:[\s\S]*?)(?:\</(?:script)\>))|(?:\<!(?:[\w-]+)(?:\s+(?:[\w-]+|\"[\s\S]*?\"|\'[\s\S]*?\'))*\s*\>)|(?:\<!--[\s\S]*?--\>)|(?:\<(?:[\w-]+)(?:\s+(?:[\w-]+)(?:=(?:[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)|(?:\</(?:[\w-]+)\>)|(?:\<!\[CDATA\[(?:[\s\S]*?)\]\]\>)|(?:(?:(?<blank>[ ]+)|[^ \<\>])+)

再给个更长的(全长765)正则表达式,这个算是我写的最长的正则表达式了。其实上面给出的第一个Regex是下面这个的一个专用于捕获blank的简化版本。
虽然长,但很有用,可以解析出整个XHTML/HTML页面的所有元素和结构来:)解析后的内容都分别保存在named groups中了,可以通过match.Groups["name"];来提取,比如match.Groups["tag"];match.Groups["attribute"];match.Groups["Style_Block";match.Groups["XML_Comment"];等,感兴趣的不妨试一试就知道了:)

(?#Copyright 2005, by Laser Lu.)(?<Style_Block>(?<begin>\<(?<tag>style)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?<body>[\s\S]*?)(?<end>\</\k<tag>\>))|(?<Script_Block>(?<begin>\<(?<tag>script)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)(?<body>[\s\S]*?)(?<end>\</\k<tag>\>))|(?<XML_Directive>\<!(?<name>[\w-:]+)(?:\s+(?<argument>[\w-:]+|\"[\s\S]*?\"|\'[\s\S]*?\'))*\s*\>)|(?<XML_Comment>\<!--[\s\S]*?--\>)|(?<Beginning_Tag>\<(?<tag>[\w-:]+)(?:\s+(?<attribute>[\w-:]+)(?:=(?<value>[^\s\>\<]*|\"[\s\S]*?\"|\'[\s\S]*?\'))?)*\s*(?:/)?\>)|(?<Ending_Tag>\</(?<tag>[\w-:]+)\>)|(?<XML_CDATA>\<!\[CDATA\[(?<data>[\s\S]*?)\]\]\>)|(?<XML_Literal>(?:(?<blank>[ ]+)|[^ \<\>])+)

关于以上的两个Regex的相关说明,应该说功能还是比较强大的了:
1。这两个正则表达式能够解析最好是HTML/XHTML格式,如果是其他格式的字符串,有可能会运行不正常;
2。支持识别的标记有:普通的HTML标记,<!--HTML注释-->,<!XML指令>,<![CDATA[ ... ]]>,标记或指令的标识符支持[a-zA-Z0-9_-:];
3。支持name=value和单独一个name的attribute,能够识别出""或''包括的属性值;
4。针对<style></style>和<script></script>标记包含的内容进行特殊处理,也就是所有的CSS和Script代码将原封不动的作为整体捕获。

//非htmt标记中的空格转换成“&nbsp;”

正则表达式代码如下:

public static string ReplaceSpace(string content)
{
string findstr="(?<fore>(?:(?:[^< ])*(?:<(?:!--(?:(?:[^-])*(?:(?=-->)|-))*--|(?:[^>])+)>)?)*)[ ](?<back>(?:(?:[^< ])*(?:<(?:!--(?:(?:[^-])*(?:(?=-->)|-))*--|(?:[^>])+)>)?)*)";
string replacestr="${fore}&nbsp;${back}";
string targetstr=System.Text.RegularExpressions.Regex.Replace(content,findstr,replacestr,System.Text.RegularExpressions.RegexOptions.IgnoreCase);
return targetstr;
}


这个正则表达式是一位朋友提供的,主要功能是将字符串中非htmt标记中的空格转换成“&nbsp;”, 目前我还没查出这个正则表达式中的问题,请熟悉正则表达式的朋友指点。

//获取URL

string regex="href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']";


preg_match_all('/<a.*?(?:|\\t|\\r|\\n)?href=[\'"]?(.+?)[\'"]?(?:(?:|\\t|\\r|\\n)+.*?)?>(.+?)<\/a.*?>/sim',$strSource,$strResult,PREG_PATTERN_ORDER);

//PHP正则相关文章

  • [专题]正则表达式在PHP中的应用
  • [文章]正则表达式中的特殊字符
  • [文章]正则表达式使用详解
  • [文章]在PHP中使用与Perl兼容的正则表达式
  • [文章]揭开正则表达式语法的神秘面纱
  • [文章]MySql正则表达式的描述
  • [Classes]Search
  • [下载]Mastering Regular Expressions (英文PDF)
  • [常见问答]如何使用PHP中的正则表达式
  • [常见问答]正则表达式的基本语法
  • [常见问答]怎么将单引号“'”前面加上一个反斜杠?
  • [常见问答]能否在SQL语句中使用正则表达式?
  • [常见问答]如何用正则表达式来表示中文?
  • //了解更多基于Perl样式的正则:http://www.pcre.org

    分享到:
    评论

    相关推荐

      常用正则表达式HTML,JAVA合集

      正则表达式的合集,包括电话号码,邮箱验证,手机号码验证等等...开发时候拿来用非常方便!

      java正则表达式提取html中的信息

      java实现用正则表达式的方法提取html中的信息,可以提取标题,正文,链接等。经过运行,没问题的

      精通正则表达式基于.NET ASP PHP JSP JavaScript

      RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...

      Java正则表达式详解+基于HTMLParser解析HTML网页

      如何在Java程序中利用正则表达式实现对字符串的解析.另外,HTMLParser是一款很强大的对HTML网页进行解析的工具,其中大量地用到正则表达式.

      精通正则表达式~~~

      精通正则表达式第三版 搜集于网络 前言..........I 第1章:正则表达式入门.... 1 解决实际问题... 2 作为编程语言的正则表达式... 4 以文件名做类比... 4 以语言做类比... 5 正则表达式的知识框架... 6 对于...

      js正则表达式详解

      包含js正则表达式基础知识、Jakarta-ORO库和一些HTML应用实例

      一个简单的markdown解析器,能够将markdown解析为html 使用最基本的正则表达式来解析并处理文本.zip

      项目主要用于入门学习,使用最基本的正则表达式来解析并处理文本,而不是常规的AST方法.zip 一个简单的markdown解析器,能够将markdown解析为html。项目主要用于入门学习,使用最基本的正则表达式来解析并处理文本,...

      markdown解析器,能够将markdown解析为html 主要用于入门学习,使用最基本的正则表达式来解析并处理文本.zip

      项目主要用于入门学习,使用最基本的正则表达式来解析并处理文本,而不是常规的AST方法 一个简单的markdown解析器,能够将markdown解析为html。项目主要用于入门学习,使用最基本的正则表达式来解析并处理文本,而...

      正则表达式

      正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它...

      Java中使用正则表达式

      最近要在项目中做HTML解析,本想使用NekoHTML来解析,... 正则表达式此时发挥了她巨大的威力,为我排忧解难,很快便完成了HTML解析工作. 在解析期间,研究了很多java正则表达式使用方法,颇得一些经验,不敢独享,愿与大家共享.

      正值表达式匹配html标签的属性值

      正则表达式是做文本解析工作必不可少的技能。如Web服务器日志分析,网页前端开发等。很多高级文本编辑器都支持正则表达式的一个子集,熟练掌握正则表达式,经常能够使你的一些工作事半功倍。例如统计代码行数,只需...

      java正则表达式解析html示例分享

      主要介绍了java正则表达式解析html示例,用到获取url的正则表达式,获取图片的正则表达式,需要的朋友可以参考下

      .net c# vb.net 解析html类库 HtmlAgilityPack 最新版 1.11.20

      支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写...

      html解析利器HtmlAgilityPack.dll

      支持用XPath来解析HTML。这个意义不小,为什么呢?因为对于页面上的元素的xpath某些强大的浏览器能够直接获取得到,并不需要手动写。节约了大半写正则表达式的时间,当然正则表达式有时候在进一步获取的时候还需要写...

      Java用正则表达式如何读取网页内容

      学习java的正则表达式,抓取网页并解析HTML部分内容  package com.xiaofeng.picup; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net....

      Python正则表达式经典入门教程

      正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到Python的re库。如果正则表达式自己代码中反复被用到的时候,我们可以将这...

      cl-ppcre:Common Lisp 正则表达式库

      CL-PPCRE - 用于 Common Lisp 的便携式 Perl 兼容正则表达式抽象的CL-PPCRE 是一个可移植的 Common Lisp 正则表达式库,具有以下特点: 它与Perl兼容(尤其是与结合使用时,可以兼容解析正则表达式字符串)。...

      一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

      * Summary of regular-expression constructs 正则表达式结构简介: * Construct Matches * Characters 字符: * x The character x x 字符 x * \\ The ...

      PHP函数preg_match_all正则表达式的基本使用详细解析

      了解正则表达式之前,须要掌握一些常用的正则表达式的基础知识,这些如果能记得最好记得,记不住须要用的时候能查到就行,就多个特殊字符,所以说正则表达式玩的就是特殊,具体大家可以查看更加细致的说明。...

      HTMLParsingTester:使用 Jsoup 解析器和正则表达式测试从网站提取数据的简单应用

      使用 Jsoup 解析器和正则表达式测试从网站提取数据的简单应用程序。 它允许您输入查询(Jsoup 选择器)并可选择从中提取值的属性。 对于正则表达式,它允许您输入正则表达式,然后显示从第一组提取的值(即将支持...

    Global site tag (gtag.js) - Google Analytics