我正在尝试确定给定页面是否不遵守标题标签(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
答案 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