プロが教えるわが家の防犯対策術!

こんにちは、
以下のような作業をperlで正規表現の置換を用いて行いたいのですがどのようにすればよいのでしょうか。

=====================================
$iが1-3までの数字をしめしています。
また、
$filename[1]='./gazou1.gif'
$filename[2]='./gazou2.gif'
$filename[3]='./gazou3.gif'
のような配列変数があるとします。


以下のようなテキスト文章を
$1$
$2$
$3$

次のように変換します。
<img src="$filename[1]">
<img src="$filename[2]">
<img src="$filename[3]">

$filename[1-3]には画像のパス名がはいっているので、最終的出力されるときには
<img src="gazou1.gif">
<img src="gazou2.gif">
<img src="gazou3.gif">
となるようにしたいです。

このような作業を行う置換操作はどのようにすればいいのでしょうか。

次のようにしてみましたが、できません。
for($i=1;$i<4;$i++){
$main_body=~ s/\$[$i]\$/<img src="$filname[$i]">/g;
}

ちなみに、これを実行すると
<img src="">となり、何も入りません。

置換したい単語が変数だったらできないのでしょうか?
回答よろしくお願いします。

A 回答 (3件)

 [$i] の部分がちょっとビミョ~です。



  s/\$$i\$/<img src="$filname[$i]">/g;

 としてみたらできましたので、試してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おっしゃる通りするとできました。

お礼日時:2004/03/03 18:09

考え方としては間違っていないですよ。


  $main_body=~ s/\$[$i]\$/<img src="$filname[$i]">/g;
の中で、filename であるべきところが filname となっていますので、それを直してみてください。

あと、どうせなんで、変数の数だけループする変わりに、そこも正規表現にしちゃうとよいかも。

 $main_body =~ s/\$(\d+)\$/<img src="$filename[$1]">/g;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
filnameは打ち間違えでした・・すみません。
正規表現の勉強になりました!

お礼日時:2004/03/03 18:12

@aaa = ("\$1\$", "\$2\$", "\$3\$");



for ($i = 0; $i < 3; $i++) {
 $main_body = $aaa[$i];
 $main_body =~ s/\$([0-9]+)\$/<img src="\$filename\[\1\]>"/g;
 print $aaa[$i] . "->" . $main_body . "\n";
}

上記のようなテストプログラムでうまくいきました。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
理解できました。

お礼日時:2004/03/03 18:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!