2017-09-12 20 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\.!', '\0', $string); 

私は同じようnumber_formatを適用しよう:

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

が、以下のエラーが表示されます。

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

をマッチに適用するurns a 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

1つの方法は、2つの別個の\ dに一致させることです。
最初は1桁以上、2桁目は正確に3桁です。

次に、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