正则表达式捕获多行的整个div块

时间:2013-12-11 14:34:07

标签: regex nginx

如何在HTML输出中捕获整个块?块内是一个未打开的“noscript”标签。

我在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>  
...

2 个答案:

答案 0 :(得分:1)

你可以试试这个正则表达式:

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

答案 1 :(得分:1)

如果div中没有​​其他div,你可以尝试这样的事情:

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

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

或像Alex这样的东西确定了开场div

如果你只想匹配没有开放的noscript标签,你可以使用这样的否定前瞻:

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

rubular

您必须使用“dot matches newlines”标志。

或者这样做:

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

请参阅here