You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用preg_match_all提取至少2位小数的数值问题排查

错误原因

  • 分隔符适配错误:目标字符串中的金额类小数使用逗号,作为小数分隔符,你正则中写的\.仅能匹配英文句号,导致大量合法的两位小数值(如47,05)无法被匹配,反而仅匹配到了其他场景下用点做分隔的数值。
  • 未限制小数位数:你使用的\d*表示匹配0位及以上小数,既会匹配到仅1位小数的不符合要求的数值(如2,4),也完全没有满足「至少2位小数」的提取规则。
  • 缺少边界校验:没有对数值的前后边界做限制,容易出现长数字片段的误匹配;你提到的纯整数89633988被\d+\.\d*匹配属于异常情况,大概率是测试时正则书写错误或上下文匹配逻辑问题。

修正方案

使用如下正则即可满足提取需求:

preg_match_all('!\b\d+[,.]\d{2,}\b!', $myString, $matches);

正则说明:

  • \b 匹配单词边界,避免从长数字串中截取片段
  • \d+ 匹配整数部分至少1位数字
  • [,.] 同时兼容点、逗号两种小数分隔符,适配你字符串中的所有小数场景
  • \d{2,} 限制小数部分至少有2位数字,完全匹配「至少2位小数」的要求

运行后$matches[0]中会输出所有符合要求的数值:37.500、47,05、8,94、47,05、8,94、55,99、55,99、47,05、55,99、55,99、0,00、0,00、0,00。

内容的提问来源于stack exchange,提问作者Trombone0904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:06:00