提取多个十进制数和从字符串PHP

问题描述:

我在一个文件中的字符串看起来像这样(昏迷或点用作小数点)结尾的字符串:提取多个十进制数和从字符串PHP

$str = "12,50 EUR, 3,5%"; 
$str = "12,50EUR, 3,5%"; 
$str = "12,50EUR,3,5%"; 
$str = "2,5%"; 
$str = "8,75 EUR"; 
$str = "12.50 EUR, 3,5%"; 
$str = "12,50 EUR, 3.5%"; 
$str = "2.5%" 
$str = "8.75 EUR"; 
$str = "8.75EUR"; 
$str = "8,75EUR"; 

我想能够从每个字符串中提取数字值,后面跟随数字后面的数字,剥离出任何空格或字符之间的数字。

作为一个例子为

$str = "12,50 EUR, 3,5%"; 

所得关联数组谨这样的(所得到的值始终使用点作为十进制分隔不论它是什么前):

array = { 
[12.75] => 'EUR', 
[3.5] => '%' 
} 
+3

你想要的输出是错误的。如果数量和百分比相等怎么办?请重新考虑一下。 –

<?php 

$str []= "12,50 EUR, 3,5%"; 
$str []= "1EUR,2%"; 
$str []= "12,50EUR, 3,5%"; 
$str []= "12,50EUR,3,5%"; 
$str []= "2,5%"; 
$str []= "8,75 EUR"; 
$str []= "12.50 EUR, 3,5%"; 
$str []= "12,50 EUR, 3.5%"; 
$str []= "2.5%"; 
$str []= "8.75 EUR"; 
$str []= "8.75EUR"; 
$str []= "8,75EUR"; 

foreach ($str as $string) { 
preg_match_all("/([0-9]+,*\.*[0-9]*\s*[A-Za-z%]*)/", $string, $results); 
$ret= array(); 
if (isset($results[0][0])) { 
     preg_match("/([0-9]+,*\.*[0-9]*)(\s*[A-Za-z%]*)/", $results[0][0], $res); 
     $num = str_replace(",", ".", $res[1]); 
     $sym = trim($res[2]); 
     $ret[$num] = $sym; 
} 
if (isset($results[0][1])) { 
     preg_match("/([0-9]+,*\.*[0-9]*)(\s*[A-Za-z%]*)/", $results[0][1], $res); 
     $num = str_replace(",", ".", $res[1]); 
     $sym = trim($res[2]); 
     $ret[$num] = $sym; 
} 

var_dump($ret); 
} 
+0

我认为这是一个很好的起点,但它可能并不总是欧元或百分比。这可以改善吗? –

+0

我会添加到上面,它也需要能够处理整数值作为字符串的一部分,如2%5EUR –