• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:置換え)

$row_cntと$1の違いと数字の参照方法について

このQ&Aのポイント
  • プログラム初心者が文字を参照する方法について質問です。$row_cntと$1の違いが理解できませんでした。また、数字を参照する方法についても教えてください。
  • preg_replace関数の使用時に、$row_cntと$1の違いが気になりました。$row_cntは投稿したレス番号を参照するために使われるようですが、$1は文字の参照になるようです。数字の参照方法についても教えてください。
  • プログラム初心者が質問です。$row_cntと$1の違いがわかりませんでした。また、数字を参照する方法についても教えてください。使い方を教えていただけると助かります。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

考え方としては まずマッチするかどうかしらべる マッチするならマッチした数値と与える数値が合致するか調べる という処理をすればよいでしょう 具体的には <?PHP $pattern="/&gt;&gt;(\d+)/"; $replacement="<a href=\"bbs.php?no=$1\">$0</a>"; $mes="test&gt;&gt;123test"; $row_cnt="123"; if(preg_match($pattern,$mes,$matches) and $matches[1]===$row_cnt){ $mes=preg_replace($pattern,$replacement,$mes); } print $mes."<br>"; ?>

flash0
質問者

お礼

わかりやすい回答ありがとうございます 提示されたコードを少し変更したらうまくいきました。

その他の回答 (1)

noname#244856
noname#244856
回答No.1

落ち着いて整理してください。 PHPのプログラムは基本的に上から順番に実行されます。 これは自明ですよね。 $pattern = "/&gt;&gt;(\d+)/"; まず $pattern に「/&gt;&gt;(\d+)/」が代入されますね。 これはただの文字列です。 $no = "$1"; "$var" とした場合は変数展開されますが、 "$1" のように 数字で始まるものは変数として認識されず、そのまま文字列 となります。よって $no に「$1」が代入されます。 これは当然の挙動ですね。 "$var" であったとしても単に変数 $var の内容が展開されるだけで、 ただの文字列になるだけです。 さて、preg_replace と何の関係も無いことに気づきませんか? $1, $2 で参照したりできるのは preg_replace の第2引数の中だけです。 これはPHPの言語としての機能ではなく、 preg_replace 関数が独自に実装しているだけです。 本題に戻りますが、重複するレス番号を避けたいならば $str = preg_replace_callback(  '/&gt;&gt;(\d++)/',  function ($m) use ($row_cnt) {   return $m[1] != $row_cnt ?    sprintf('<a href="bbs.php?no=%d">%s</a>',     $m[1],     $m[0]    ) :    $m[0]   ;  },  $str ); とするのが一番賢いかもしれません。

flash0
質問者

お礼

回答ありがとうございます preg_replaceの中でしか参照できないんですね。勘違いしていました 設置の仕方がわからずsyntax errorが出てしまいました。すいません

関連するQ&A