php - 如何正确提取PHP字符串中的整数和小数?

标签 php

我在 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/

相关文章:

php - CodeIgniter - ci_sessions 迁移

php - 在 Laravel 中使用 JSON 列

php - 使用 jQuery 为每个元素运行 .post()

php - FFMpeg 在命令行中工作,但不在 PHP 中使用 exec();

javascript - mysql 数据库日期时间格式的 JQuery 日期和时间

php - 使用 socket.io node.js 和传入消息的通知系统的架构实现和设计

php - 使用列名从 MySQL 返回 JSON

php - 正则表达式在正则表达式中第一次出现#STRING# 时停止

php - 在 csv 文件单元格中打印新行

php - 父子同 table