• ベストアンサー

preg_replace, ereg_replace

$bodyにはテキストファイルなどから読み込んだ、$dateと言う文字(変数ではない)と、改行を含む文字列。 それで、「$date」を、phpスクリプト上の$dateの値に置換したく、 $tmp = preg_replace("/\$date/s", $date, $body); または、 $tmp = ereg_replace("\$date",$date,$body); としたのですが、どうも置換されません。何がいけないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

>$が行末記号でないようにするために、頭に「\」を >付けたのですが、なぜここで\$としたのにもかかわ >らず、行末記号として認識されてしまったのでしょ >うか・・・ 「$date」はPHPの変数を意味します。その扱いはダブルクォート内部でも同じです。 従ってダブルクォート内部では「\$date」ではじめて文字列としての「$date」になります。 このままでは#1に書いた通り「行末」を意味しますので「文字」としての「$」とするために「\\」を更に付加します。 結果「"\\\$date"」という記述になります。 ダブルクォートを使用せずにシングルクォートを使用すると「'\$date'」とそのまま書けたりします。

arcsin
質問者

お礼

なるほど、丁寧にご解説してくださりありがとうございました~

その他の回答 (1)

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

外していたら申し訳ないです。 正規表現で「$」って行末(?)を意味します。 って事でこのままでは行末に続くdateという文字列を探しているのではないでしょうか? $tmp = preg_replace("/\\\$date/s", $date, $body); $tmp = ereg_replace("\\\$date",$date,$body); では駄目ですか? # No-Testなので駄目かもしれませんが、、、m(_ _)m

arcsin
質問者

お礼

ありがとございます♪ ご指摘どおり、記述してみたところできました。 ですが、perl記述に慣れているため、疑問が残ってしまいます。 $が行末記号でないようにするために、頭に「\」を付けたのですが、なぜここで\$としたのにもかかわらず、行末記号として認識されてしまったのでしょうか・・・(perlだとこれで出来るのですが・・・) phpだと正規表現中の \$date は何を意味するのでしょうか。

関連するQ&A