`

解析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兼容(尤其是与结合使用时,可以兼容解析正则表达式字符串)。...

      定制爬虫工具(sqlserver版),通过正则表达式自定义抓取模版,通过自定义数据模型入库.zip

      常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

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

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

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

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

    Global site tag (gtag.js) - Google Analytics