2013-02-13 69 views
1

我想確定一個給定的頁面是否不尊重標題標籤(h1,h2等)順序。事實上,我希望能夠解析一堆頁面,並且它會按照頁眉順序返回每頁DONT解析HTML標頭標籤的最有效的方法順序

我的第一個目標是能夠發現是否緊接其後是除h2之外的其他東西。我用以下模式實現了這一點

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

以前的正則表達式正在爲我工​​作,雖然它並不是非常有效,也不是完美的。

所以在第一我想有一些幫助改善這種模式,如果可能的話解釋一下比較我的舊模式和它爲什麼如此低效。而在第二個,我想升級/修改模式,以達到最初的目標,確保文檔頭標籤順序得到尊重。

注: 我使用RegexHero爲基準

I know Regular Expressions are typically not best practice for parsing HTML但是這更多的是一個鍛鍊自己的用戶更有效地lookarounds,原子分組和這樣的,感謝您的理解。

我們可以使用下面的模式和以下文本作爲樣本

模式:

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

文字:

lol1 BLA lol3喇嘛lol2喇嘛lol4

+1

如果我假如每次我看到有人試圖解析HTML或XML正則表達式時鎳... – 2013-02-13 16:28:08

+0

@YuriyFaktorovich請參閱更新 – 2013-02-13 16:59:27

+1

嗯,你可以編輯標題使其與HTML無關? – Bergi 2013-02-13 17:05:34

回答

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 
+0

你的答案確實有效,但它打敗了我的問題的目的真正的目的,這是爲了得到更好的週轉和分組問題 – 2013-02-13 17:05:44

+1

xy問題? http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Christophe 2013-02-13 18:13:09