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 PACKAGE, Моя цель — подать заявку number_format до 10000, чтобы строка читала 10,000-lb. GVWR PACKAGE,

Я тестировал с preg_replace и можете получить номер, используя:

preg_replace('!\d+-lb\.!', '\0', $string);

Я пытаюсь подать заявку number_format лайк:

preg_replace('!\d+-lb\.!', number_format('\0'), $string);

но получите следующую ошибку:

number_format() expects parameter 1 to be float, string given

применение intval() на матч возвращается 0, а не ожидаемые 10000.

Я не уверен, как поступить. Уловка, которую я также определил, заключается в том, что я не хочу, чтобы форматирование чисел применялось к первому 2017 году. preg_match не быть конкретным или, возможно, применить preg_match на матч в первом preg_match получить только номер?

1

Решение

Один из способов обойти это — сопоставить два отдельных \ 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);

https://3v4l.org/HvAjg
Это будет работать для чисел 1000+, если вам нужны числа ниже 1000, тогда нужны некоторые настройки. Просто скажи мне, и я исправлю это.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector