dポイントプレゼントキャンペーン実施中!

$bodyにはテキストファイルなどから読み込んだ、$dateと言う文字(変数ではない)と、改行を含む文字列。

それで、「$date」を、phpスクリプト上の$dateの値に置換したく、

$tmp = preg_replace("/\$date/s", $date, $body);
または、
$tmp = ereg_replace("\$date",$date,$body);
としたのですが、どうも置換されません。何がいけないのでしょうか?

A 回答 (2件)

>$が行末記号でないようにするために、頭に「\」を


>付けたのですが、なぜここで\$としたのにもかかわ
>らず、行末記号として認識されてしまったのでしょ
>うか・・・

「$date」はPHPの変数を意味します。その扱いはダブルクォート内部でも同じです。
従ってダブルクォート内部では「\$date」ではじめて文字列としての「$date」になります。
このままでは#1に書いた通り「行末」を意味しますので「文字」としての「$」とするために「\\」を更に付加します。
結果「"\\\$date"」という記述になります。

ダブルクォートを使用せずにシングルクォートを使用すると「'\$date'」とそのまま書けたりします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/09/04 23:04

外していたら申し訳ないです。



正規表現で「$」って行末(?)を意味します。
って事でこのままでは行末に続くdateという文字列を探しているのではないでしょうか?

$tmp = preg_replace("/\\\$date/s", $date, $body);
$tmp = ereg_replace("\\\$date",$date,$body);

では駄目ですか?
# No-Testなので駄目かもしれませんが、、、m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとございます♪
ご指摘どおり、記述してみたところできました。

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

お礼日時:2004/09/03 15:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!