2017-09-12 1 views
1

에서 나는 같은 문자열 함께 일하고 : 문자열 내에서PHP - 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입니다. 제 목표는 문자열 10,000-lb. GVWR PACKAGE이되도록 number_format을 10000에 적용하는 것입니다.

나는 preg_replace으로 테스트되었으며, 사용 수를 얻을 수 있습니다 :

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

하지만 다음과 같은 오류가 나타납니다 :

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

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

내가 좋아하는 number_format을 적용하려고 시도

일치 항목에 를 적용합니다. urns는 0이고 예상되는 10,000은 아닙니다.

진행 방법이 확실하지 않습니다. 내가 알아 낸 문제는 첫 번째 2017에 숫자 서식을 적용하고 싶지 않다는 것입니다. preg_match을 구체적으로 지정하지 않거나 숫자를 얻으려면 preg_match 내의 일치 항목에 preg_match을 적용해야합니까?

+0

floatval은 그 방법을 반환합니다. "10000"에는 어떤 변형이 있습니까? "8000"이 될 수 있습니까? – Andreas

+0

이 답변을 사용할 수 있습니다 : [정규식이있는 문자열의 PHP 형식 numebrs] (https://stackoverflow.com/a/3904536/3600709) – ctwheels

답변

3

한 가지 방법은 두 개의 별도 \ 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 번호를 작동

은 다음 몇 가지 비틀기를 필요로한다. 말해줘. 내가 고칠거야.

+0

1000 이하의 숫자도 사용할 수 있습니다. https://3v4l.org/UbTa9 – Andreas