我有这样的事情: ...
<div class="viewport viewport_h" style = "overflow: hidden;" >
<div id="THIS" class="overview overview_h">
<ul>
<li>some txt to be captured</li>
<li>some txt to be captured</li>
<li>some txt to be captured</li>
</ul>
<div>
" some text to be captured"
</div>
</div>
</div>
"some text not to be captured"
</div>
<div class="scrollbar_h">
<div class="track_h"></div>
...
我希望使用div
捕获id=THIS
内的所有内容。我正在使用像:
@<div class="viewport viewport_h" style = "overflow: hidden;" >\s*<div class="overview overview_h">\s*(?:<ul>)?([\s\d\w<>\/()="-:;‘’!,:]+)(?:</div>)+?@
最后一个(?:</div>)+?
是为了让它变得非贪婪而且#34;&lt; / div&gt;&#34;但是</div>
后面的所有其他人都没有工作和捕获。 :(
答案 0 :(得分:1)
正如评论中所述regex
不是解析(?:X|H)TML
文档的正确方法。
让我们考虑你的例子直接使用正则表达式:
<div[^>]*id="THIS"[^>]*>(.*?)</div>
这将匹配以下文字:
<ul>
<li>some txt to be captured</li>
<li>some txt to be captured</li>
<li>some txt to be captured</li>
</ul>
<div>
" some text to be captured"
</div>
您可以看到它不是正确的结果,因为您需要另一个</div>
因此您需要计算开放的div
以便能够检测到结束div
s
它全部基于您使用的语言。
现在,在这种情况下,如果你想创建一个非贪婪的结束潜水,你需要在dot
之前放置一个+
,如下所示:
<div[^>]*id="THIS"[^>]*>(.*?)(</div>).+?
现在它将匹配另一个</div>
,但仍然很难让正则表达式检测到真实的结果(对于另一种情况来说更复杂)。这就是解析{{1}的正确方法的原因使用(?:X|H)TML