我在 PHP 中有一个字符串,我只想提取整数和小数,这是一个示例:
<?php
$string = 'María vive en un pueblo de 25 957 habitantes y cobra 1859 euros al mes. OJO: no sé si os habéis fijado, pero los números del último ejemplo
no llevan un punto o una coma separando los millares (25.957 o 1.859). Sé que resulta extraño, pero la nueva normativa de la R.A.E.
dice que los números de cuatro cifras NO llevarán separación (1859) y los números de cinco cifras o más NO llevarán ni puntos ni comas,
sino una separación (25 957 o 1 343 392). El 94% de los niños ha traído los deberes hechos. He pagado $50,95 dólares.';
?>
在这种情况下,我尝试使用这一行获取数字:
$numbers = preg_replace('/[^0-9\.,]/', ' ', $string);
但问题是结果是:
25 957 1859 . , 25.957 1.859 . , . . . 1859 , 25 957 1 343 392 . 94 . 50,95 .
我想得到这个结果:
25 957 1859 25.957 1.859 1859 25 957 1 343 392 94 50,95
我该如何解决?
我需要你的帮助。
最佳答案
您使用的是 .
表示千位,,
表示小数,看起来您的文本是为人类准备的,所以前面总是有一个数字一个 .
和 ,
.
所以你想要的是 1 个或多个数字,后跟 0 个或多个千组(一个 .
后跟 3 个以上的数字),可选地后跟一个 ,
和一个或多个数字。
One or more numbers: [0-9]+
0 or more thousand-groups: (\.[0-9]{3})*
Optionally a `,` and one or more numbers: (,[0-9]+)?
组合:[0-9]+(\.[0-9]{3})*(,[0-9]+)?
$string = 'María vive en un pueblo de 25 957 habitantes y cobra 1859 euros al mes. OJO: no sé si os habéis fijado, pero los números del último ejemplo
no llevan un punto o una coma separando los millares (25.957 o 1.859). Sé que resulta extraño, pero la nueva normativa de la R.A.E.
dice que los números de cuatro cifras NO llevarán separación (1859) y los números de cinco cifras o más NO llevarán ni puntos ni comas,
sino una separación (25 957 o 1 343 392). El 94% de los niños ha traído los deberes hechos. He pagado $50,95 dólares.';
$matches = [];
preg_match_all('/[0-9]+(\.[0-9]{3})*(,[0-9]+)?/', $string, $matches);
print_r($matches[0]);
/*
Array
(
[0] => 25
[1] => 957
[2] => 1859
[3] => 25.957
[4] => 1.859
[5] => 1859
[6] => 25
[7] => 957
[8] => 1
[9] => 343
[10] => 392
[11] => 94
[12] => 50,95
)
*/
关于php - 如何正确提取PHP字符串中的整数和小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57532010/