![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
プログラム初心者です
文字を参照でつかおうとおもったんですがつかえませんでした
$row_cntは投稿したレス番号です
レス番号と引用した数字が同じ場合は置換えないようにしようとおもいました
$noに入っている文字がなにか確認したら参照した数字ではなくて文字の$1になってました。
どうやったら参照した数字を変数にいれられるでしょうか?
$pattern="/>>(\d+)/";
$no= "$1";
if($row_cnt!=$no){
$replacement="<a href=\"bbs.php?no=$1\">$0</a>";
$str=preg_replace($pattern,$replacement,$mes);
}
よろしくおねがいします
No.2ベストアンサー
- 回答日時:
考え方としては
まずマッチするかどうかしらべる
マッチするならマッチした数値と与える数値が合致するか調べる
という処理をすればよいでしょう
具体的には
<?PHP
$pattern="/>>(\d+)/";
$replacement="<a href=\"bbs.php?no=$1\">$0</a>";
$mes="test>>123test";
$row_cnt="123";
if(preg_match($pattern,$mes,$matches) and $matches[1]===$row_cnt){
$mes=preg_replace($pattern,$replacement,$mes);
}
print $mes."<br>";
?>
No.1
- 回答日時:
落ち着いて整理してください。
PHPのプログラムは基本的に上から順番に実行されます。
これは自明ですよね。
$pattern = "/>>(\d+)/";
まず $pattern に「/>>(\d+)/」が代入されますね。
これはただの文字列です。
$no = "$1";
"$var" とした場合は変数展開されますが、 "$1" のように
数字で始まるものは変数として認識されず、そのまま文字列
となります。よって $no に「$1」が代入されます。
これは当然の挙動ですね。
"$var" であったとしても単に変数 $var の内容が展開されるだけで、
ただの文字列になるだけです。
さて、preg_replace と何の関係も無いことに気づきませんか?
$1, $2 で参照したりできるのは preg_replace の第2引数の中だけです。
これはPHPの言語としての機能ではなく、
preg_replace 関数が独自に実装しているだけです。
本題に戻りますが、重複するレス番号を避けたいならば
$str = preg_replace_callback(
'/>>(\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
);
とするのが一番賢いかもしれません。
回答ありがとうございます
preg_replaceの中でしか参照できないんですね。勘違いしていました
設置の仕方がわからずsyntax errorが出てしまいました。すいません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Excel(エクセル) Excelの操作方法を教えてください!頭文字2~8文字で特定の値に返す方法 8 2022/07/14 11:26
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(プログラミング・Web制作) python質問 1 2023/08/14 11:54
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- Excel(エクセル) 数式の置換がうまく行かない 6 2022/05/04 15:51
- Visual Basic(VBA) Excel VBA 教えてください。 VBA初心者です。 詳しい方がいましたら教えてください。 下記 3 2023/04/25 11:22
- Java Java 南京錠 2 2023/02/04 11:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8を使うと、大量のWarningが...
-
phpでcookieがうまく保存されない
-
PHPでMysqlにデータがあるかど...
-
PHPの記述で値が取れません。
-
PHPSpreadsheetを使って関数を...
-
入力した部分を表示させたまま...
-
php に関して質問です。 各ユー...
-
phpのクラスメソッドの定義が長...
-
phpにおいて$xを計算式の文字列...
-
PHP MySQLに画像を直接保存
-
index.phpって何ですか? 具体...
-
メールフォームのタイトルが文...
-
PHPのセッション有効期限について
-
php 完了画面の送信メールのコ...
-
in_arrayについて教えて下さい。
-
共通の処理をまとめる方法がわ...
-
PHP & MySQL: Server-side Web ...
-
最後の段階で詰まっています。R...
-
ゆゆにゃ。
-
【初心者】XAMPPのapacheの(恐...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ゆゆにゃ。
-
phpでcookieがうまく保存されない
-
フォームで戻った際に入力済み...
-
PHP8を使うと、大量のWarningが...
-
PHPで画像の渡しが上手く行きま...
-
PHPのエラーの解消法について教...
-
PHPのセッション有効期限について
-
入力した部分を表示させたまま...
-
PHPSpreadsheetを使って関数を...
-
phpinfo で MySQL のバージョン...
-
PostgreSQLからCSV形式でエクス...
-
ワードプレスサイト PHP8.0.25...
-
PHP MySQLに画像を直接保存
-
php 入力画面から確認表示画面...
-
if(preg_match("/[^0-9]/",$gu_...
-
htmlspecialcharsが機能してい...
-
どうして送信されないのでしょ...
-
php 確認表示画面で値をSESSION...
-
PHPを使って、別サイトの一部を...
-
PHP MySql ページング
おすすめ情報