删除卷曲中的多余文本
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>';
?>
它工作正常
我正在尝试使用 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>';
?>
它工作正常