質問: preg_replace('[hogehoge]','バナナ',$str,1); echo $str; で、本当は 「バナナは実は・・・・トマトだったんだ!!!なにー[hogehoge]は本当に?・・・」 となっていて欲しいのですが、実際は [バナナ]は実は・・・・トマトだったんだ!!!なにー[hogehoge]は本当に?・・・ という[ ]が残ってしまう現象が発生してしまいます。 なぜなのでしょうか? 分かる方がいたら教えていただきたいです。 よろしくお願いいたします。
回答: $str = preg_replace('[hogehoge]','バナナ',$str,1); echo $str; 第一引数は正規表現の「パターン」ですが、パターン文字列はデリミタで括らないといけません。 また [ ] は意味(文字クラスの定義の開始・終了)を持ってしまうのでエスケープしないといけないのでは? $str = preg_replace('/\[hogehoge\]/','バナナ',$str,1); (蛇足) 無理にpreg_replaceを使わなくてもいいのでは? $str = '[hogehoge]は実は・・・・トマトだったんだ!!!なにー[hogehoge]は本当に?・・・'; $search = '[hogehoge]'; $replace = 'バナナ'; if (($pos = mb_stripos($str, $search)) !== false) $str = mb_substr($str, 0, $pos) . $replace . mb_substr($str, $pos+mb_strlen($search)); echo $str;