2013-12-11 43 views
0

如何在HTML輸出中捕獲整個塊?塊內部是一個未打開的「noscript」標籤。正則表達式捕獲多行的整個div塊

我在nginx上與subs_filter一起使用它,意味着任何基於DOM的解決方案都不能在這裏工作。

... 
<div id="me_104" > 
<img src="http://www.google.com" alt="" style="position: absolute; left:0; top: 0; width: 0px; height: 0px;" /> 
     <iframe id="zz_3423_543534" name="zz_3423_543534_54635677" src="http://google.com" width="400" height="80" scrolling="no" frameborder="0" allowtransparency="true" marginwidth="0" marginheight="0"></iframe></noscript> 
</div> 
... 
+0

什麼是該塊可能改變的部分? – Stephan

+0

@Alex img src可以更改,iframe id,name,src可以更改。 html結構停留在is。 – Nenad

回答

1

你可以試試這個正則表達式:

<div\s+id\s*=\s*"me_\d+"\s*>\s*<img[^>]+>\s*<iframe[^>]+></iframe></noscript>\s*</div> 
+0

謝謝,但它沒有抓住它。 – Nenad

+0

更新:正則表達式的工作,但不與nginx上的subs_filter,因爲它逐行解析。 – Nenad

1

如果你從來沒有在專區內另一個div你可以嘗試這樣的事:

<div id="me_104" >.*?</noscript>.*?</div> 

<div.*?>.*?</noscript>.*?</div> 

或Alex的確定義打開DIV

如果你想,如果沒有,你可以使用一個是負面的前瞻這樣的開放指令碼的標籤,只匹配:

<div.*?>(?:(?!<noscript>|</div>).)*</noscript>.*?</div> 

查看rubular

你將不得不使用一個「點匹配換行符「標誌。

還是做到這一點:

<div.*?>(?:(?!<noscript>|<\/div>)(?:.|\n))*<\/noscript>(?:.|\n)*?<\/div> 

here

+0

謝謝,但都不抓住它們。 – Nenad

+0

問題可能是點不匹配新行。請看看我編輯的答案。 – morja

+0

更新:正則表達式的工作,但不與nginx上的subs_filter,因爲它逐行解析。 – Nenad