• ベストアンサー

正規表現を使った置き換えにおいての質問。置き換えたい文字列が変数だったら。

こんにちは、 以下のような作業を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="">となり、何も入りません。 置換したい単語が変数だったらできないのでしょうか? 回答よろしくお願いします。

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 [$i] の部分がちょっとビミョ~です。   s/\$$i\$/<img src="$filname[$i]">/g;  としてみたらできましたので、試してみてください。

noname#32059
質問者

お礼

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

その他の回答 (2)

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.3

考え方としては間違っていないですよ。   $main_body=~ s/\$[$i]\$/<img src="$filname[$i]">/g; の中で、filename であるべきところが filname となっていますので、それを直してみてください。 あと、どうせなんで、変数の数だけループする変わりに、そこも正規表現にしちゃうとよいかも。  $main_body =~ s/\$(\d+)\$/<img src="$filename[$1]">/g;

noname#32059
質問者

お礼

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

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

@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"; } 上記のようなテストプログラムでうまくいきました。

noname#32059
質問者

お礼

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