2017-07-05 5 views
0

最初に-に数字の前に0を挿入したいとします。最初の負の数を見つけてゼロを前に付ける

私は以下の簡単なコードを試しました。

$formula = '[ (((-594 - 0))/ 55032411) *244 ]'; 
preg_match('/^-?\d+(\.\d+)?$/', $formula, $match); 

print_r($match); 
$result = str_replace($match[0],'0'.$match[0],$formula); 
echo $result; 
exit; 

以下の結果が欲しいです。

[ (((0-594 - 0))/ 55032411) *244 ] 

答えて

0

preg_replace関数を用いて溶液:

$formula = '[ (((-594 - 0))/ 55032411) *244 ]'; 
$result = preg_replace('/-?\d+(\.\d+)?/', '0$0', $formula, 1); 

print_r($result); 

出力:

[ (((0-594 - 0))/ 55032411) *244 ] 

preg_replaceに渡さ4引数1入力におけるパターンの最大置換であります文字列

0

私は確信しているので、Regex!= 42私はうまくいかない正規表現を作った。
要するに、文字列に最初の-が見つかり、位置を保存します。
これ以前のものは$ partですが、すべてstr_replaceを使って[() and spaceをすべて削除しています。この部分が空の場合
はその後、その後何の数はそうそれは少し複雑だが、それは正規表現を使用していないので、それは速いかもしれ0

を追加する最初の-の前には存在しません。しかし計算の最初に[() and space以外の記号を使用する場合は、それらを削除する配列に追加する必要があります。
私はそれについて考えているかもしれません+-/*はそこにあるはずです。

$formula = '[ (((-594 - 0))/ 55032411) *244 ]'; 
$pos = strpos($formula, "-"); 
$part = str_replace(array("(",")","["," "), array("","","",""),substr($formula, 0, $pos)); 

If($part ==""){ 
    $formula = substr($formula, 0,$pos) ."0". substr($formula, $pos); 
} 

Echo $formula; 

私はそれが複雑だと認めますが、私は正規表現以外の解決策を作りたいと思っていました。
https://3v4l.org/TaSjr

+0

あなたは空の 'str_replace()'の二番目のパラメータを作ることができます4要素配列の代わりに文字列を使用します。 – mickmackusa

+0

@mickmackusaはそれを知らなかった。私はあなたが配列を持っていれば、置き換え時に配列が必要だと思ったと思った。 – Andreas

+0

すべての置換えが同じなら、このようにして凝縮することができる。あなたのRegex!= 42はどういう意味ですか? – mickmackusa

1

1桁の先読みを使用する場合、キャプチャグループは必要ありません。これはかなり速いパターンです。

パターン:-(?=\d)

Pattern Demo

コード:(Demo

$formula='[ (((-594 - 0))/ 55032411) *244 ]'; 
var_export(preg_replace('/-(?=\d)/','0-',$formula,1)); // match -, prepend 0 

出力:

'[ (((0-594 - 0))/ 55032411) *244 ]' 
関連する問題