从PHP中的字符串中提取浮点数

时间:2009-06-03 12:16:15

标签: php regex text

我想将字符串转换为浮点数。例如

152.15 x 12.34 x 11mm

152.15, 12.34 and 11

并存储在一个数组中,使得$ dim [0] = 152.15,$ dim [1] = 12.34,$ dim [2] = 11.

我还需要处理像

这样的事情
152.15x12.34x11 mm

152.15mmx12.34mm x 11mm

谢谢。

5 个答案:

答案 0 :(得分:18)

$str = '152.15 x 12.34 x 11mm';
preg_match_all('!\d+(?:\.\d+)?!', $str, $matches);
$floats = array_map('floatval', $matches[0]);
print_r($floats);

(?:...)正则表达式构造就是所谓的non-capturing group。这意味着在$mathces数组的一部分中不会单独返回块。这不是严格必要的在这种情况下,但是知道这是一个有用的结构。

注意:对元素调用floatval()并不是必需的,因为如果您尝试在算术运算或类似操作中使用它们,PHP通常会正确处理类型。尽管如此,它并没有受到伤害,特别是因为只是一个班轮。

答案 1 :(得分:4)

<?php

$s = "152.15 x 12.34 x 11mm";

if (preg_match_all('/\d+(\.\d+)?/', $s, $matches)) {
    $dim = $matches[0];
}

print_r($dim);

?>

给出

Array
(
    [0] => 152.15
    [1] => 12.34
    [2] => 11
)

答案 2 :(得分:2)

$string = '152.15 x 12.34 x 11mm';
preg_match_all('/(\d+(\.\d+)?)/', $string, $matches);
print_r($matches[0]); // Array ( [0] => 152.15 [1] => 12.34 [2] => 11 ) 

答案 3 :(得分:1)

$str = "152.15 x 12.34 x 11mm";
$str = str_replace("mm", "", $str);
$str = explode("x", $str);
print_r($str); // Array ( [0] => 152.15 [1] => 12.34 [2] => 11 ) 

测试它并且它适用于上面的所有字符串。

答案 4 :(得分:0)

preg_match_all("/\d*\.?\d+|\d+/", "152.15mmx12.34mm x .11mm", $matches);

此示例也支持 .11 等数字,因为它们是有效数字。 $matches[0]将包含 152.15 12.34 0.11 ,因为您输入的结果为float。如果您不 0.11 将显示为 .11 。我会使用array_map输入演员。

$values = array_map("floatval", $matches[0]); 

您可以使用任何数学的值,而不使用类型转换它们。直接打印时只需要进行铸造。