※ ChatGPTを利用し、要約された質問です(原文:正規表現での複数箇所の文字列置換について)
正規表現での複数箇所の文字列置換について
このQ&Aのポイント
複数箇所の文字列置換についての質問です。特定の文字を検出し、HTMLタグに置換するスクリプトを作成したいです。
文字列中から[id:xxx]を検出して<A>タグに変換し、その後数字部分を抽出してDBからデータを取得したいです。
ただ、上記スクリプトでは複数の[id:xxx]があると最初に検出された数字しか取得できません。他に効果的な方法があれば教えてください。
文字列から特定の文字を検出し、
HTMLタグに置換するスクリプトを作成しようとしています。
例:
元の文字列:xxxxxx[id:1]xxxx[id:2]xxxx
↓
置換後の文字列:
xxxxxx
(<A>タグによるリンク。idが1番のタイトルをDBから参照)
xxxx
(<A>タグによるリンク。idが2番のタイトルをDBから参照)
xxxx
要求している処理順序:
1:文字列中から[id:xxx]を検出して<A>タグに変換
2:id:xxx の xxx部分(数字)を抽出
3:2で得た数字でSQLを実行
4:DBから得た文字列で<A>タグを完成
<A href="test.php?id=(2で得た数字)">(4で得た文字列)</A>
5:以上を[id:xxx]の個数分だけ繰り返し
---
スクリプト:
// 文字列
$str = "xxxxxx<br>[id:1]<br>xxxx<br>[id:2]<br>xxxx";
// 置換
$result = ereg_replace("\[id:([0-9]+)\]","<a href=\"test.php?id=\\1\">xxx</a>";
ここで、id: の次に続く数字を抽出して
その数字を元にDBからデータを引っ張ってこようと思ってます。
// 抽出
$pregresult = preg_match("/[0-9]+/",$result,$match);
$id = $match[0];
ここで $id に番号が入り、その番号でSQL文を作成したいのですが
文字列中に[id:xxx]がひとつだけなら正常に動作するのですが
二つ以上存在する場合、$id には最初に検出された数字(上記例では 1 )
しか入ってこないので、二つ目以降のidが認識できず困ってます。
複数の検出・置換対象を順次処理していく方法があれば
ご教示いただければ幸いです。
もしくは、他にもっとスマートな方法があるのであれば
ご提示いただければ幸いです。
以上、よろしくお願いいたします。
お礼
すっかり preg_match_all の存在を忘れてました… おかげでできました。ありがとうございました。