删除卷曲中的多余文本

Removing Extra Text in curl

我正在尝试使用 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 5.00</span>

正在抓取

US 5.00

但是我想去掉美元只想要

515.00

有人可以帮忙吗

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

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

正则表达式的含义如下:

  • [^ 表示我们开始负数集。它将匹配任何不在这个集合中的东西
  • 0-9 表示数字 0 到 9
  • . 是一个句点,以防数字(如您的示例)有小数点(通常您必须在正则表达式中转义句点,因为句点表示 "any character," 但是当它在集合中时像这样(在方括号中),你不必转义它
  • \- 是一个转义破折号“-”,我添加了它以防您找到负数。
  • ] 关闭集合
  • + 表示它可以匹配一个或多个字符(这样它会在一次而不是三遍中替换 "US $",虽然我不知道它是否有所作为)

然后我将匹配的任何内容(除数字、句点或破折号之外的所有内容)替换为空字符串 '',这会有效地删除它。

既然您说字符串的格式将始终相同,那么就不需要任何正则表达式了。只需使用 str_replace()

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

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

这会给你一个字符串:515.00。如果你想让它成为一个真正的浮点数,那么就投它:

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

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

我来晚了抱歉:

<?php

$price = "US 5.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>';

?>

它工作正常