- ベストアンサー
正規表現を使った置き換えにおいての質問。置き換えたい文字列が変数だったら。
こんにちは、 以下のような作業を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="">となり、何も入りません。 置換したい単語が変数だったらできないのでしょうか? 回答よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
[$i] の部分がちょっとビミョ~です。 s/\$$i\$/<img src="$filname[$i]">/g; としてみたらできましたので、試してみてください。
その他の回答 (2)
- leaz024
- ベストアンサー率75% (398/526)
考え方としては間違っていないですよ。 $main_body=~ s/\$[$i]\$/<img src="$filname[$i]">/g; の中で、filename であるべきところが filname となっていますので、それを直してみてください。 あと、どうせなんで、変数の数だけループする変わりに、そこも正規表現にしちゃうとよいかも。 $main_body =~ s/\$(\d+)\$/<img src="$filename[$1]">/g;
お礼
回答ありがとうございます。 filnameは打ち間違えでした・・すみません。 正規表現の勉強になりました!
- yatokesa
- ベストアンサー率40% (201/496)
@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"; } 上記のようなテストプログラムでうまくいきました。
お礼
回答ありがとうございます。 理解できました。
お礼
ありがとうございます。 おっしゃる通りするとできました。