1

我正在尝试使用具有如下数据的 PHP来抓取信息:

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

我需要得到介于<br><a>标签之间的年份。我通过使用 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);

但它没有找到介于<br><a>标签之间的年份。有谁知道我可以做些什么来找到年份?

4

2 回答 2

2

试试这个:

<?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 = '/<br>.*<a/';或任何其他适合您的标签。

于 2013-03-17T06:02:20.317 回答
1

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

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

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

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

因为它们以 开头<br>和结尾<a,但这可能不是您所需要的,您的任何一年都将是这样的:

foo<br><br>1998 - <a href="http://site.com/movie/id/2345">A Night at the Roxburry
于 2013-03-17T06:32:42.703 回答