使用正则表达式配合 preg_match_all() 函数可以提取字符串中的所有数字。调用该函数时,将匹配模式设置为 /\d+/ 以捕获连续的数字序列,并将结果存入第三个参数数组中,这样就能得到包含所有数字子串的数组。

如何区分并提取整数与浮点数
如果需要分别处理整数和浮点数,可以使用更精确的正则模式。例如,使用 /\b\d+\.\d+\b/ 匹配浮点数,使用 /\b\d+\b/ 匹配纯整数。通过调整正则表达式的边界符和点号转义,可以确保提取的数值符合预期的格式,避免将小数部分误判为两个独立的整数。

$str = "Price is 10.5 and quantity is 20";
preg_match_all('/\b\d+\.\d+\b/', $str, $floats);
preg_match_all('/\b\d+\b/', $str, $ints);
print_r($floats[0]); // Array ( [0] => 10.5 )
print_r($ints[0]); // Array ( [0] => 20 )
如何处理负数和小数点的特殊情况
当字符串中包含负数或科学计数法时,简单的 \d+ 无法正确提取。需要修改正则表达式以支持可选的负号 -? 以及指数部分 [eE][+-]?\d+。此外,如果小数点是作为分隔符而非数值的一部分(如版本号),则需要排除它。通过组合这些条件,可以构建一个健壮的正则表达式来应对复杂的数字格式。
立即学习“PHP免费学习笔记(深入)”;

$str = "Temp: -5.2C, Rate: 3.14e2";
preg_match_all('/-?\d+\.?\d*([eE][+-]?\d+)?/', $str, $matches);
print_r($matches[0]); // Array ( [0] => -5.2 [1] => 3.14e2 )
基于程序中某个输入、条件或结果的具体问题
在提取过程中,如果输入字符串为空或完全不包含数字,preg_match_all() 会返回 0 且结果数组为空。此时程序应检查返回值以决定后续逻辑,避免对空数组进行迭代操作导致错误。这种边界情况的处理对于保证程序的稳定性至关重要。



















