1

という名前のこの置換配列があり$initialdataます:

array ($initialdata)
  'd' => string '1.40' (length=4)
  'a' => string '1.67' (length=4)
  'vi' => string '0' (length=1)
  't' => string '?' (length=1)

それから私はこの文字列を持っています:

$str =  "-(vi + sqrt(2*a*d + vi^2))/a)";

私がする時 :

str_replace(array_keys($initialdata),array_values($initialdata),$str);

私は得る:

-(0 + sqr?(2*1.67*1.40 + 0^2))/1.67)

何が起こったのかというと、「sqrt」の「t」が$initialdata配列の「t」の値に置き換えられました。を使用しているためにこれが発生することはわかっておりstr_replace、 を使用して単語全体を一致させる必要がありますが、連想配列を使用して単語全体を一致preg_replaceさせる実装は見たことがありません。preg_replace可能であれば、これをどのように達成できますか?

4

1 に答える 1

3

正規表現で\bは、単語の境界です。これはうまくいくはずです:

$data = array(
  '/d/' => '1.40',
  '/a/' => '1.67',
  '/vi/' => '0',
  '/\bt\b/' => '?'
);

$result = preg_replace(array_keys($data), array_values($data), $str);
于 2013-07-31T19:27:19.980 に答える