源代码和preg_match

时间:2013-01-09 23:06:05

标签: php

我是Php的新手,我想学习从其他网站获取信息的代码。我看了preg_match并爆炸了。

我的问题是我想要一些信息,但没有标签。

我将此代码用于此标记

$site=file_get_contents("$link");
$price='#<div class="price">(.*?)<\/div>#si';
preg_match_all($price,$site,$pricelist);
for ($a=0; $a<5; $a++){
echo $pricelist[1][$a];
}

但在源代码中它是这样的:

<b>500€</b></a><div class=gh_hl1>
<b>510€</b></small></a><br clear=all><div class=gh_hl1>
<b>520€</b></a><div class=gh_hl1>
<b>530€</b></a><div class=gh_hl1>
<b>540€</b></a><div class=gh_hl1>
<b>550€</b></a><div class=gh_hl1>

<b>此标记开始,它以<div class=gh_hl1></small></a><br clear=all><div class=gh_hl1>结束,还有另一个标记以<b>开头

我想知道有没有可能拿这个价格?

我也看了Simple HTML Dom Parser。但我找不到任何东西。谢谢你的回答...

1 个答案:

答案 0 :(得分:0)

好吧,你可以在HTML文件中查找模式。有一点值得注意的是€符号。你可以搜索一下。这个正则表达式应该这样做:

$price='/(\d*)€(\d*)/';

如果€符号在金额之前或之后(如果你们之后只做过,那么最后一次减去(\ d *))就应该抢价。

还有其他相似之处,例如粗体标签,因此您可以添加此标签以获得更多特异性:

$price='/<b>(\d*)€(\d*)</b>/';

那仍然是一个相当普通的字符串,真正将它们联系在一起的是最后的div<div class=gh_hl1>。因此,您可以使用此正则表达式搜索,处理过程中的标记:

$price='/<b>(\d*)€(\d*)<\/b>(<\/small>)?<\/a>(<br clear=all>)?<div class=gh_hl1>/';

这是我的镜头。但这仍然是非常愚蠢的(如果它能在PHP中工作,我最近并不积极,最近主要做Ruby),所以让我们简化为:

$price='/<b>(\d*)€(\d*)<\/b>.*<\/a>.*<div class=gh_hl1>/';

现在我们将获得所有标签。如评论中所述,有一百万种更好的方法可以做到这一点,而<b>标记上方的父项可能表明这是一个价格。寻找那些。

由于我们想要的主要内容是b标签之间的价格,并确保它以该类的div结束,我们可以制作正则表达式:

$price='/<b>(\d*)€(\d*)<\/b>.*<div class=gh_hl1>/';