2012-03-30 55 views
0

我试图解析变量下面的文本海峡...如何解析变量

$str = 3,283,518(10,569/2,173) 

,我使用下面的代码获取3,283,518

$arr = explode('(',$str); 
    $num = str_replace(',','',$arr[0]); //prints 3283518 

上面的$ str为动态有时它可能只有3,283,518(意思是w/o()),所以爆炸函数会抛出一个错误,那么得到这个值的最好方法是什么?谢谢。

+0

看看http://stackoverflow.com/questions/5803679/parse-math-operations-with-php – 2012-03-30 20:13:24

+0

我认为OP只是想在'('之前得到字符串,没有什么涉及数学运算 – ajreal 2012-03-30 20:15:41

回答

3
$str = "3,283,518(10,569/2,173)"; 

preg_match("/[0-9,]+/", $str, $res); 
$match = str_replace(",", "", array_pop($res)); 

print $match; 

这将返回3283518,只需通过采取串$str,仅由数字和逗号的第一部分。这也将工作只是3,283,5183,283,518*10,569

+0

甚至可以在'$ str = 30
*' – seoppc 2012-03-30 20:28:41

+0

@seoppc的情况下工作,这将花费你不到一分钟的时间来测试。是的,它会的。 – kba 2012-03-30 20:40:47

+0

其工作... :) – seoppc 2012-03-30 20:59:54

0

可能会从您需要了解动态$海峡实际上是怎样的,但如果有更多的信息,它只是那些你也许可以做到以下几点

if (strpos($str, '(') !== false) { 
    $arr = explode('(',$str); 
    $num = str_replace(',','',$arr[0]); 
} else { 
    //who knows what you want to do here. 
} 
0

如果你真的肯定的数字格式,可以将值之间尝试类似: ^([0-9]+,)*([0-9]+) 例如,将它与preg_match一起使用。 但是,如果它不是一个简单的格式,你应该去一个算术表达式解析器。

0

模拟解决方案:

<?php 

$str = '3,283,518(10,569/2,173)'; 

if (strstr($str, '(')) 
{ 
    $arr = explode('(',$str); 
    $num = str_replace(',','',$arr[0]); 
} 
else 
{ 
    $num = str_replace(',','',$str); 
} 

    echo $num; 

?>