如何在2个标签之间找到废料信息?

时间:2013-03-17 06:00:54

标签: php html regex

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

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

但它找不到<br><a>标签之间的年份。有谁知道我可以做些什么才能找到这一年?

2 个答案:

答案 0 :(得分: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/';或任何其他适合您的标签。

答案 1 :(得分:1)

您正在使用的表达式:$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