使用正则表达式 preg_match 配合模式 /^([+-]?\d+(\.\d+)?)/ 可以从带单位的字符串中提取开头的数字部分。该做法会匹配整数或浮点数,忽略紧随其后的非数字字符(如单位、空格),并返回提取到的数值字符串。若字符串不以数字开头,则无法提取到有效内容。

如何从包含前缀的字符串中只提取纯数字部分
当输入字符串在数字前包含非数字前缀(如货币符号或字母)时,上述基础正则无法直接提取。需要调整正则模式为 /[+-]?\d+(\.\d+)?/ 以跳过前缀,直接定位第一个出现的数字序列。这样即使字符串以 "abc123" 开头,也能正确提取出 "123"。此方法适用于大多数包含混合内容的文本解析场景。

<?php
$input = "Price: $19.99 USD";
preg_match('/[+-]?\d+(\.\d+)?/', $input, $matches);
echo $matches[0]; // 输出 19.99
?>
如何处理负数和小数点的精度问题
在处理提取出的数字字符串时,需考虑负号和小数点的存在。基础正则 [+-]?\d+(\.\d+)? 能正确捕获负数和浮点数。例如输入 "-5.5kg" 将提取出 "-5.5"。若需进行数学运算,应使用 floatval() 或 (float) 强制转换。注意,若字符串中包含多个数字序列(如 "10a20b"),该正则仅匹配第一个出现的数字序列 "10"。如需提取所有数字,应改用 preg_match_all。
立即学习“PHP免费学习笔记(深入)”;

<?php
$input = "Temp: -5.5C";
preg_match('/[+-]?\d+(\.\d+)?/', $input, $matches);
$number = floatval($matches[0]);
echo $number; // 输出 -5.5
?>



















