返回首页


有用的正则表达式(正则表达式)是无法形容的。尤其是在解析文件,它是一个非常适合和不可缺少的工具。所有的HTML和XML解析器基本上使用正则表达式提取HTML文档中的大是大非的信息,如标签的名称,,宗正标签是否是良好的,空的,或由核对了一堆规则的标签,甚至畸形。一个HTML解析器所需要的所有正则表达式,最重要/复杂,是一个相匹配的元素的开始标记。
有很多正则表达式解决方案,就如何解析HTML标签和属性。最流行的一种(在互联网上,我已经看到了这么远)是这样的:"LT(\ /)(\ W)[^>] *(\ /)GT; quot;这是一个非贪婪正则表达式匹配一个开始和结束标记。例如,它会匹配quot; LT; pregt; quot;和"LT ;/ pregt; quot;它也将匹配quot;
"这是一个空元素。这个表达式是低效的,因为它没有考虑到一堆案件:解析器如何知道如果标签是一个空的块,或内联元素?如何将它知道如果标签具有属性和如何处理这些属性呢?不能回答这些问题可以通过使用这种过于简单化的Regex。
我发现一个非常有效的正则表达式解析HTML标签和属性:LT / ^(\ W)((??\ \ W(:\ * \ *(:(:quot [^"] * quot ;) |(:'[^'] *')| [^> \])))*)\ *(\ /);/ GT?。这个正则表达式更容易,不仅确定空标签,但还解析属性的Regex智能在这些tags.This的一块是在John Resig的的"HTMLparser.js"一个简单的HTML解析器由John Resig。乍一看,这似乎是复杂的。但如果你看看这个正则表达式更加紧密,你会发现它只是对标签中提取必要的信息:它的标记名称,其属性,其类型(空)。打破正则表达式
有三个主要群体:第一组?(\ W)??抓住了正在审议的标签名称。第二组是最大的三个。它包含子组,其中大部分是不匹配(组:不匹配,这意味着该组匹配后,本集团将不会提供的信息)。这第二组匹配在标签的属性(如果存在)。引号组检查(双或单)围绕一个属性的值。它也处理的情况下,那里arenbsp;围绕属性的值没有引号:[^ GT \ S]。这也使得正则表达式匹配的非贪婪([^>] *防止捕获多个直角支架)。第三组则是简单的检查,如果被检查的标记是一个空元素(如
{七}| danielthesolver

回答

评论会员: 时间:2
s