去除卷曲的多余文本

时间:2019-06-28 12:16:19

标签: php web-scraping simple-html-dom

我正在尝试使用curl和simple_html_dom库抓取一些数据,我可以成功抓取数据,但是问题是我不希望包含数据的文本。

这是我正在使用的代码:

$price = $html->find("div[id='vi-mskumap-none'] span[itemprop='price']",0)->plaintext;

这是html源代码:

<div id="vi-mskumap-none" style="" class="u-flL w29 vi-price ">
    <span class="notranslate" id="prcIsum" itemprop="price" style="" content="515.0">US $515.00</span>

正在报废

  

515.00美元

但是我想删除美元,只想要

  

515.00

有人可以帮忙

4 个答案:

答案 0 :(得分:3)

由于您说的是字符串的格式始终是相同的,因此不需要任何正则表达式。只需使用str_replace()

$price = 'US $515.00';
$price = str_replace('US $', '', $price);

这是一个演示:https://3v4l.org/ZDl5t

这将为您提供一个字符串:515.00。如果您希望它是真正的浮动对象,则只需将其投射:

$price = (float)str_replace('US $', '', $price);

答案 1 :(得分:1)

如果您知道这只是一个数字,我的方法是:

$price = preg_replace("/[^0-9.\-]+/", '', $price);

正则表达式的含义如下:

  • [^表示我们正在开始一个否定集合。它将匹配此集合以外的任何内容
  • 0-9表示数字0到9
  • .是一个句点,以防数字(如您的示例)有小数点(通常您必须在正则表达式中转义句点,因为句点的意思是“任何字符”,但是当它在这样的集合中时) (在方括号中),您不必逃脱
  • \-是转义的破折号“-”,我加了它,以防您发现负数。
  • ]关闭集合
  • +表示它可以匹配一个或多个字符(通过这种方式,它可以在一次通过而不是三个过程中代替“ US $”,尽管我不知道这是否有区别)

然后,我用空字符串''替换所有匹配的内容(数字,句点或破折号除外),

答案 2 :(得分:1)

我认为您可以使用getAttribute('content')代替plaintext来获得所需的结果。

答案 3 :(得分:1)

我来晚了对不起:

<?php

$price = "US $515.00";
$price = str_replace('US $', '', $price);
echo '<div id="vi-mskumap-none" style="" class="u-flL w29 vi-price ">';
echo '<span class="notranslate" id="prcIsum" itemprop="price" style="" content="515.0">'.$price.'</span>';

?>

工作正常