我想为网页抓取制作正则表达式
如何搜索多行结果:
例如,这是我的Html
<div id="cn-centre-col-inner">
<p>sothing her</p>
...
</div>
<div id="ok"> ..</div>
我想找一个正则表达式来诅咒我这个结果:
<div id="cn-centre-col-inner">
<p>sothing her</p>
...
</div>
答案 0 :(得分:2)
正则表达式不是最好的工具,你应该使用html解析器。
假设你有这个正则表达式:
(?s)<div id="cn-centre-col-inner">.*?<\/div>
您将能够捕获您想要的内容:
<div id="cn-centre-col-inner">
<p>sothing her</p>
...
</div>
但是,你不能确保第一个结束div是正确的。例如,对于这种情况:
<div id="cn-centre-col-inner">
<p>sothing her</p>
...
<div>something inner 1</div>
<div>something inner 2</div>
</div>
<div id="ok"> ..</div>
您将丢失内容,您只会捕获:
<div id="cn-centre-col-inner">
<p>sothing her</p>
...
<div>something inner 1</div>
像这样:
这是一个很好的例子,可以说明为什么不应该使用正则表达式来解析复杂的html。我强烈建议你使用html解析器。
如果你极其确定你的div cn-centre-col-inner
没有嵌入div,那么你可以继续上面的正则表达式。实际上,您可以使用捕获组来获取div中的所有内容:
(?s)<div id="cn-centre-col-inner">(.*?)<\/div>
^---^--- notice the parentheses
答案 1 :(得分:1)
在阅读有关正则表达式和html的警告后,如果只是针对特定任务,您可以尝试这样的脏东西:
(<div[^>]*id="cn-centre-col-inner.*</div>)\n<div id="ok"