$text = "今日財布を拾った。";
$value = "100円";
$pattern = "/(今日).*(を拾った。)/";
$replace = sprintf("\\1%s\\2");
$text = preg_replace($pattern, $replace, $text);

のような処理を行ったとき、
うまく$textに結果が格納されません。
$valueの最初の文字が数字で無い場合は
うまくいきますが、"100円"のように数字で
始まっていると、うまくいきません。
良い回避方法は無いでしょうか?

A 回答 (2件)

こんにちわ。



確かに常にスペースが入ってしまいます。(やっぱり指摘されちゃいましたか。←確信犯)

↓こんな方法ではどうでしょう??
$text = "今日財布を拾った。";
$val ="100円";
$value = (string) $val;
$pattern = "/(今日).*(を拾った。)/";
$replace = sprintf("\\1 %2s\\2",$value);
$text = preg_replace($pattern, $replace, $text);
$array = explode(" ",$text);
$text = $array[0].$array[1];

なんだか邪道のような気もするんですが、とりあえずうまくいきます。(例によって自信なし)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

$textにスペースが入っていなければ
それでいいと思うのですが、
$textにスペースが入っているとだめですよね。
せっかく回答してもらって申し訳ないんですが。

一応、自分のやりたかったことは、
テキストファイル
hoge = "foo"
bar = "aaa"

END

のfooの部分を置換したかったので
$text = 「テキストファイルの中身」
$val = "999";
$pattern = "/(hoge = \").*?(\".*END)/ms";
$replace = sprintf("\\1%s\\2", $val);
$text = preg_replace($pattern, $replace, $text);
の$patternと$replaceを
$pattern = "/(hoge = )\".*?\"(.*END)/ms";
$replace = sprintf("\\1\"%s\"\\2", $val);
とすることで解決しました。

お礼日時:2001/08/25 19:41

こんばんわ。


ちょっと試してみました。

>$replace = sprintf("\\1%s\\2");

ここは$replace = sprintf("\\1 %s\\2");の様に\1と%sの間にスペースを1個入れてやるとうまくいくようです。

ところで、$replace = sprintf("\\1 %2s\\2",$value);の間違いでは??(PHP初心者なので全然自信なし)

この回答への補足

>$replace = sprintf("\\1%s\\2");
は、
$replace = sprintf("\\1%s\\2", $value);
の間違いです。

たしかに、\\1と%sの間にスペースを入れれば
うまくいきますが、出力される文章にも、
スペースが入っちゃうんですよね。。。

補足日時:2001/08/25 08:52
    • good
    • 0

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

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ