不規則なパターンマッチで置換するには?

[上に] [前に] [次に]
Shinji 1999/06/16(水) 17:58:42
初めまして。ぜひともみなさまのお知恵を拝借したく、投稿させてもらいました。
perlでの以下の様なパターンの置換はどのように行えばよろしいのでしょうか?

<img src="normal.gif">
<a href="big.gif"><img src="small.gif">
</a>  と複数行あった場合(さらに続く場合もあり)に、

<a href="normal.gif">normal.gif</a>
<a href="big.gif">big.gif</a>

という結果が欲しいのです。なにかよい方法はないでしょうか。
よろしくお願いいたします。

aki 1999/06/18(金) 12:35:35
(さらに続く場合もあり)というのがどのように続くのかちょっと
わかりませんが、

  s/^<img src="(.*)">$/<a href="$1">$1<\/a>/gi ;
  s/^<a href="(.*)"><img src="(.*)">$/<a href="$1">$1<\/a>/gi ;
  s/^<\/a>$//gi ;

じゃダメなんでしょうか?
もっと複雑な置換しようとしてるのだったらゴメンナサイ。
#全然不規則じゃないし(^^;

Shinji 1999/06/18(金) 17:38:00
akiさん、早速のお返事ありがとうございます。
しかし、正常に置換してくれません。(というかまったく置換されません)

補足:(さらにつづく場合、不規則)
<img src="xx1"><img src="xx2"><a href="big">  (FORM内で改行される)
<img src="small">                             (同)
</a><img src="nazo">

と、予想が付かない場合です。

説明を省いてしまって申し訳なかったのですが、
掲示板のCGIをPerlで作成してまして、FORMからの入力(タグフル許可)
の情報を、オプションでアンカーに置き換えるというものです。
普通は、1行程度なのですが、中には入り乱れて入力されるものが
あって、正常に置換できなくて困っています。いろいろ考えるうち頭が
パニックになってる状態です^^;

また、質問の仕方などが不適切ならご指摘下さい。

B-Cus 1999/06/19(土) 00:56:41
 s|<img src="(.*?)">|<a href="$1">$1</a>|gi ;
 s|<a href="(.*?)">\n*<img src="(.*?)">\n*</a>|<a href="$1">$1</a>|gi ;
じゃダメ?

Shinji 1999/06/23(水) 16:09:10
[[解決]]
B-Cusさん、ありがとうございます。
お返事が遅れましたが、
行を逆転させましたが...無事置換で出来ました。

そもそも、すぐ解決出来なかったのは、\nを判断してたつもりが、
これ以前に、
s/\r\n/\r/g;
s/\n/\r/g;
があったからだめだったんですね^^;勉強不足でした。

どうも、みなさんありがとうございました。

[上に] [前に] [次に]