【问题标题】:How do I find scrape information between 2 tags?如何在 2 个标签之间找到抓取信息?
【发布时间】:2013-03-17 06:00:54
【问题描述】:

我正在尝试使用 PHP 来抓取信息,这些信息的数据如下:

<br>1998 - <a href="http://example.com/movie/id/2345">A Night at the Roxburry<a/>

我需要得到&lt;br&gt;&lt;a&gt; 标签之间的年份。我通过使用 PHP Simple DOM HTML 解析器获得了电影的标题。这是我用来解析标题的代码

foreach($dom->getElementsByTagName('a') as $link){
    $title = $link->getAttribute('href');
}

我尝试使用:

$string = '<br>1998 - <a href="http://example.com/movie/id/2345">A Night at the Roxburry<a/>';
$year = preg_match_all('/<br>(.*)<a>', $string);

但它没有找到介于 &lt;br&gt;&lt;a&gt; 标记之间的年份。有谁知道我可以做些什么来找到年份?

【问题讨论】:

    标签: php html regex


    【解决方案1】:

    试试这个:

    <?php
    $subject = '<br>1998 - <a href="http://site.com/movie/id/2345">A Night at the Roxburry<a/>';
    $pattern = '/<br>[0-9]{4}/';
    preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
    print_r($matches);
    ?>
    

    请注意,如果年份以其他格式显示,您可以更改模式。如果您想查看两个标签之间的所有内容,可以使用 $pattern = '/&lt;br&gt;.*&lt;a/'; 或任何其他适合您的标签。

    【讨论】:

      【解决方案2】:

      您使用的表达式:$year = preg_match_all('/&lt;br&gt;(.*)&lt;a&gt;', $string); 将在 &lt;br&gt;&lt;a&gt; 之间找到文本,但在您的示例中,您在任何地方都没有 &lt;a&gt;。尝试在 &lt;br&gt;&lt;a 之间查找文本,如下所示:

      $year = preg_match_all ('/<br>([^<]*)<a/', $string);
      

      请注意,我还将. 更改为[^&lt;] 以确保它将在下一个标签处停止,否则它将匹配如下字符串:

      <br>foo<br><br>1998 - <a href="http://site.com/movie/id/2345">A Night at the Roxburry<a
      

      因为它们以&lt;br&gt; 开头并以&lt;a 结尾,但这可能不是您所需要的,您的任何一年都会这样:

      foo<br><br>1998 - <a href="http://site.com/movie/id/2345">A Night at the Roxburry
      

      【讨论】:

        猜你喜欢
        • 2020-10-16
        • 1970-01-01
        • 2014-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        相关资源
        最近更新 更多