如何在正则表达式中制作多行

How to make mutiple lines in Regular expressions

我想为网页抓取做一个正则表达式

如何搜索多行结果:

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

阅读有关正则表达式和 html 的警告后,如果它只是针对特定任务,您可以尝试一些肮脏的事情:

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

正则表达式不是执行此操作的最佳工具,您应该改用 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 解析器。

如果您非常确定您的divcn-centre-col-inner没有嵌入div,那么您可以继续使用正则表达式多于。实际上你可以使用捕获组来获取 div:

中的所有内容
(?s)<div id="cn-centre-col-inner">(.*?)<\/div>
                                  ^---^--- notice the parentheses