我有像这样的数字:
1.80
2.75
@ 1.55
这些数字是字符串,我试图让它们通过preg_match。这时我有这个:
$pattern = '/ [0-9]{1}\.[0-9]{2}/';
$result = preg_match($pattern, $feed, $matches);
这很好用,但我的preg_match需要更高的精度,但我找不到解决方案。 使用此模式,将找到类似1.556的数字。我不想要这个,我的数字长度将是4个字符。包括点。
此外,在这里,我无法捕捉以@开头的数字,只能查看空格。我怎么能这样做?
$result = preg_match($pattern, 'test 1.556 red @1.62 blue 2.33 ?', $matches);
这里所需的结果是1.62和2.33
答案 0 :(得分:2)
作为正则表达式的替代方法,PHP - Sanitization - Filters:
$array = explode(' ', 'test 1.556 red @1.62 blue 2.33 ?');
$result = filter_var_array(
array(
'convert' => $array
),
array(
'convert' => array(
'filter' => FILTER_SANITIZE_NUMBER_FLOAT,
'flags' => FILTER_FLAG_ALLOW_FRACTION | FILTER_FORCE_ARRAY
)
)
);
var_dump(array_filter(array_map('floatval', $result['convert'])));
结果:
array(3) {
[1]=>
float(1.556)
[3]=>
float(1.62)
[5]=>
float(2.33)
}
答案 1 :(得分:1)
答案 2 :(得分:0)
如果你想要它达到4精度并且@被捕获那就是你需要的
$pattern = '/ @*([0-9]{1}\.[0-9]{2})\b /';