我使用file_get_contents提取网站的som html信息,我希望通过echo打印ti
我该怎么做
$page = file_get_contents('*******');
preg_match("/<span class=\"a-text-strike\".*span>/", $page, $precio_antes);
preg_match("/<span id=\"priceblock_ourprice\".*span>/", $page, $precio_ahora);
preg_match("/<td class=\"a-span12 a-color-price a-size-base\".*td>/", $page, $precio_descuento);
echo "Antes: ".$precio_antes. "Ahora: " .$precio_ahora." (-" .$precio_descuento. "%)";
答案 0 :(得分:0)
$ precio_descuento就是数组
不是$precio_descuento
而是$precio_descuento[0]
或implode('', $precio_descuento)
ps:和其他人一样
答案 1 :(得分:0)
您应该稍微更改正则表达式,因为您不会总是得到预期的结果:
让.*
懒惰,否则会跳过一些结束</span>
代码并直接转到最后一个:.*?
;
使.
也匹配换行符,否则如果开始和结束标记不在同一行,匹配将无法找到任何内容:使用s
模式修饰符;
由于代码可以嵌套,请务必测试结束标记,包括斜杠:/span>
,而不只是span>
;
preg_match
is an array的第三个参数中的结果,因此您需要采用您感兴趣的元素:[0]
改编代码:
preg_match("/<span\s+class=\"a-text-strike\".*?\/span>/si", $page, $precio_antes);
preg_match("/<span\s+id=\"priceblock_ourprice\".*?\/span>/si", $page, $precio_ahora);
preg_match("/<td\s+class=\"a-span12\s+a-color-price\s+a-size-base\".*?\/td>/si", $page, $precio_descuento);
echo "Antes: {$precio_antes[0]} Ahora: {$precio_ahora[0]} (-{$precio_descuento[0])}";
一般不建议使用正则表达式来解析HTML。总是会出现错误的情况,因为提供程序更改了属性的顺序,或者用单引号替换了双引号,......等等。你真的应该看看DOMDocument
来解析HTML。