解析HTML标头标签顺序的最有效方法

时间:2013-02-13 16:25:04

标签: .net regex regex-negation regex-lookarounds

我正在尝试确定给定页面是否不遵守标题标签(h1,h2等)的顺序。事实上,我希望能够解析一堆页面,并且每个页面返回不要按照标题顺序。

我的第一个目标是能够发现是否紧接着是除了h2之外的东西。我用以下模式实现了这个目标

(?<=<h1[^<>]*>.+?)(?<!<h1[^<>]*>.+?<h2[^<>]*>.+?)<h[3-6][^<>]*>

之前的正则表达式对我有用,虽然它不是很有效且远非完美。

所以在第一个地方我想帮助改进这种模式,并且如果可能的话,比较我的旧模式以及它为什么效率低下的原因。并且在第二个,我想升级/修改模式以实现原始目标,这是确保文档标题标记顺序得到尊重。

注意: 我正在使用RegexHero进行基准测试

I know Regular Expressions are typically not best practice for parsing HTML但这对我自己来说更像是一种练习更有效的外观,原子分组等等,感谢您的理解。

我们可以使用以下模式和以下文本作为样本

模式:

 (?<=lol1.+?)(?<!lol1.+?lol2.+?)lol[3-6]

文字:

  

lol1 bla lol3 bla lol2 bla lol4

1 个答案:

答案 0 :(得分:0)

您可以做的是将标题序列提取到您可以操作的数组。例如:

<h1><h3></h3></h1><h2><h3><h4></h4></h3></h2>

会转化为:

[1,3,-3,-1,2,3,4,-4,-3,-2]

然后,您可以使用简单的操作来验证您的结构(例如,从一个值跳转到下一个值是+/- 1)。

正则表达式:

/(<h\d|<\/h\d)/g