亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確提取PHP字符串中的整數和十進制數?

如何正確提取PHP字符串中的整數和十進制數?

PHP
慕的地8271018 2021-11-26 16:33:21
我在 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我該如何解決?我想得到你的幫助。
查看完整描述

3 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

您使用 a.表示千位和 a,表示小數,看起來您的文本是供人類使用的,因此在 a.和之前總會有一個數字,。


因此,您想要的是 1 個或多個數字,然后是 0 個或多個千組(a.后跟 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

)

*/


查看完整回答
反對 回復 2021-11-26
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

使用這個正則表達式:

(\d*\.)?\d+

注意
此 exp 將匹配25 9572 個匹配項(用于數字之間的空格)。


查看完整回答
反對 回復 2021-11-26
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

可能不是最優雅的方法,但您可以使用基于您的第一個 REGEX 的兩個 preg_replace 函數并刪除小數而不用任何數字包裹它們,如下所示:


$numbers = preg_replace('/[^0-9\.,]+/', ' ', $string);

$decimals = preg_replace('/([^0-9][\.,])/', '', $numbers);

var_dump($decimals); // string(56) " 25 957 1859 25.957 1.859 1859 25 957 1 343 392 94 50,95"

現場示例:https : //3v4l.org/9aUCt


查看完整回答
反對 回復 2021-11-26
  • 3 回答
  • 0 關注
  • 184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號