PHP問題 どうして置換されないのでしょうか?


<?php
$s = 'あい\\\\うえお';
$re = '/\\\\/';
$rep = '>>match!<<';
$count = 0;

var_dump($s);
preg_match($re, $s, $matches);
var_dump($matches);
//=> array(1) {
// [0]=>
// string(1) "\"
// }

var_dump(preg_replace($re, $rep, $s, $count));
//=> string(17) "あい\\うえお"

var_dump($count);
//=> int(0)
?>

preg_match()ではマッチしているようです。

しかし、同じ正規表現を用いた preg_replace() では置換が行われません。

なぜ置換が行われないのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/09/18 16:57:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:y-kawaz No.1

回答回数1422ベストアンサー獲得回数226

ポイント60pt
//間違い
var_dump(preg_replace($re, $rep, $s, $count));
//正しい
var_dump(preg_replace($re, $rep, $s, -1, $count));

preg_replace の第4引数は置換回数の上限です。置換回数の取得用変数の指定は5番目。

置換回数の上限を0としているので、置換されなくて当然です。

id:nannde

ありがとうございます!!

1時間以上テスト繰り返してました(TT)

ご名答でした。

2009/09/18 16:57:06
  • id:nannde
    すみません。
    置換自体は preg_replace() を避け、
    preg_match() の $matches を利用して実現できましたので、
    preg_replace() で置換が行われない理由だけでも十分です。

    わかりづらくてすみません。
  • id:GoldenDawn
    あう、遅かった。
    間違いというか、PHP 5.1.0 からの仕様なので
    PHP4 のサーバーならそのままで変換されるはず。

    http://jp2.php.net/manual/ja/function.preg-replace.php

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません