2013-12-11 87 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