如何在正则表达式中创建多行

时间:2015-02-18 19:59:17

标签: regex web-scraping web-crawler html-parsing

我想为网页抓取制作正则表达式

如何搜索多行结果:

例如,这是我的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>

2 个答案:

答案 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>

像这样: enter image description here

这是一个很好的例子,可以说明为什么不应该使用正则表达式来解析复杂的html。我强烈建议你使用html解析器。

如果你极其确定你的div cn-centre-col-inner没有嵌入div,那么你可以继续上面的正则表达式。实际上,您可以使用捕获组来获取div中的所有内容:

(?s)<div id="cn-centre-col-inner">(.*?)<\/div>
                                  ^---^--- notice the parentheses

enter image description here

答案 1 :(得分:1)

在阅读有关正则表达式和html的警告后,如果只是针对特定任务,您可以尝试这样的脏东西:

(<div[^>]*id="cn-centre-col-inner.*</div>)\n<div id="ok"