Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-字符串中的preg_替换数字_Php_Regex_Preg Replace - Fatal编程技术网

PHP-字符串中的preg_替换数字

PHP-字符串中的preg_替换数字,php,regex,preg-replace,Php,Regex,Preg Replace,我使用的字符串如下: $string = "2017 MODEL YEAR 6.7L POWER STROKE V8 DIESEL 6-SPEED AUTO TRANS 3.55 ELECTRONIC LOCKING AXLE FX4 OFF-ROAD PACKAGE .SKID PLATES 10000-lb. GVWR PACKAGE"; 字符串中是字符串10000-lb.GVWR包。我的目标是将number\u格式应用于10000,以便字符串读取10000-lb.GVWR-PACKAGE

我使用的字符串如下:

$string = "2017 MODEL YEAR 6.7L POWER STROKE V8 DIESEL 6-SPEED AUTO TRANS 3.55 ELECTRONIC LOCKING AXLE FX4 OFF-ROAD PACKAGE .SKID PLATES 10000-lb. GVWR PACKAGE";
字符串中是字符串
10000-lb.GVWR包
。我的目标是将
number\u格式
应用于10000,以便字符串读取
10000-lb.GVWR-PACKAGE

我一直在使用
preg_replace
进行测试,可以使用以下方法获取数字:

preg_replace('!\d+-lb\.!', '\0', $string);
我尝试应用
number\u格式
如下:

preg_replace('!\d+-lb\.!', number_format('\0'), $string);
但收到以下错误:

number_format() expects parameter 1 to be float, string given
intval()
应用于匹配将返回0,而不是预期的10000


我不知道如何进行。我还发现,我不希望将数字格式应用于第一个2017。我是否需要将
preg\u match
调整为不那么具体,或者可能对第一个
preg\u match
中的匹配应用
preg\u match
以仅获取数字?

一种方法是匹配两个单独的\d.
第一个是一个或多个数字,第二个正好是三个数字

然后我使用str_replace替换字符串中的数字

$string = "2017 MODEL YEAR 6.7L POWER STROKE V8 DIESEL 6-SPEED AUTO TRANS 3.55 ELECTRONIC LOCKING AXLE FX4 OFF-ROAD PACKAGE .SKID PLATES 10000-lb. GVWR PACKAGE";

Preg_match("/(\d+)(\d{3})-lb/", $string, $match);

$find = $match[0];
$replace = $match[1] .",". $match[2] ."-lb";

Echo str_replace($find, $replace, $string);


这将适用于数字1000+,如果您需要低于1000的数字,则需要进行一些调整。告诉我,我会解决它。

奇怪的是,floatval返回的方式是这样的。“10000”有什么变化?它可以是“8000”吗?你可以用这个答案: