2016-03-08 95 views
1

我试图从页面上刮取产品价格,但不幸的是,它不是一个很好的干净的div,所以我不得不清除所有其他垃圾。在小数位后删除所有文本2个位置PHP

注意:我已经看过几个例子,但是他们都假设你的变量中只有很好的组织数字,而不是结尾的原始HTML。

字符串的例子我的变量可以持有:

$2.87 <span>10% Off Sale</span> 

我打过关于与SUBSTR和sttrpos,阅读手册,但还是无法弄清楚我自己。

我想在找到第一个小数位后将字符串切成两个数字......毫无疑问,当您知道如何时,它非常简单!

我想直到结束:

$2.87 

我已经让自己陷入到尝试混乱的一个例子:提前

$whatIWant = substr($data, strrpos($data, ".") + 2); 

感谢,

回答

3

尝试这种解决方案:

<?php 

$string = "$2.87 <span>10% Off Sale</span>"; 

$matches = array(); 
preg_match('/(\$\d+\.\d{2})/', $string, $matches); 

var_dump($matches); 

输出:

array(2) { 
    [0]=> 
    string(5) "$2.87" 
    [1]=> 
    string(5) "$2.87" 
} 

欲了解更多信息(为什么结果是数组等),你应该检查在preg_match()功能的PHP手册:link

+0

优秀!似乎要做这项工作,如果我用$匹配[0]访问它。在我的例子开始处我已经包含了一个$,这是不正确的,开始时没有符号,只是一个数字。如果$不存在,那么你的例子不起作用,你可以调整它在开始时没有$的情况下工作吗?非常感谢! – Ryan

+1

您的模式现在也会匹配'$ 2a87'。也有一个原因,你为什么使用'[0-9]'而不是'\ d'出于好奇? – Mikey

+0

@Pigeon有一点!价格将永远是不同的... – Ryan

0

有是更好的方法来做到这一点。一开始,假设你有上面的HTML结构永远是一样的,你可以这样做:

$var = "$85.25 <span>10% Off Sale</span>"; 
$spl = explode("<", $var); 
echo $spl[0]; 
+0

不幸的是,结构不总是相同的。页面像狗一样编码,唯一可靠的部分是每个价格都有一个小数点后面跟着两位数的事实,所以遇到的第一个小数点是最可靠的方法。谢谢:) – Ryan

2

下面的内容应该为你抓取比赛;

$pattern = '/(\$\d+\.\d{2})/'; 
$string = '$2.87 <span>10% Off Sale</span>'; 

$matches = array(); 
preg_match($pattern, $string, $matches); 

输出:

阵列([0] => $ 2.87 [1] => $ 2.87开始)

+0

这也是正确的答案。非常感谢您的帮助 – Ryan