アプリ版:「スタンプのみでお礼する」機能のリリースについて

$data = 'a b c<a href="x/y/z/hoge.jpg">hoge.jpg </a> …<A HREF = "aa/b/c/hoga.jpg">hoga.jpg</A>…';
上記の文字列から正規表現で
『x/y/z/hoge.jpg』と『aa/b/c/hoga.jpg』を取り出して配列に格納しようと思っているのですがうまくいきません。
条件は
1.『<a href="』(大文字の場合、またはイコールの前後に半角スペースが含まれる場合もあります。)と『">』に囲まれています。
2.文字列中に何回登場するかは決まっておりません。
3.取り出す文字列の長さはきまっておりません。
以下のように書いてみたのですが…。書き方がわかりません。
どなたかご教授いただけないでしょうか。
よろしくお願いいたします。
while ($data =~ /<a\s[hH][rR][eE][fF].=.\".*?">/g){ push(@arr, $&); }
foreach(@arr){print $_,"\n";}

A 回答 (3件)

#1の例は質問者さんのスクリプトを最大限活かそうと思ってのものですので、


#2の方のコメントも踏まえつつお好きに改変してくださいませ >質問者様
    • good
    • 0
この回答へのお礼

ご親切にどうもありがとうございます。

お礼日時:2008/03/18 11:02

//g を配列コンテキストで使うと「キャプチャした部分を全てまとめたリスト」になるはずなので, while のところは実は


my @arr = ($data =~ /.../gi);
でいいような気がします>#1.
    • good
    • 0
この回答へのお礼

そういう書き方もできるのですね。
参考になります。
ありがとうございます。

お礼日時:2008/03/18 11:04

だいぶ混乱しているみたいですね。


ピリオドが変な具合に入ってます。
マッチングでiオプションをつければ大小文字の違いは無視してくれます。

てなところでこんなのとか

my $data = 'a b c<a href="x/y/z/hoge.jpg">hoge.jpg </a> …<A HREF = "aa/b/c/hoga.jpg">hoga.jpg</A>…';
my @arr;

while ($data =~ /<a \s* href \s* = \s* "([^"]+)" >/gix){ push(@arr, $1); }

print join("\n", @arr), "\n";

xオプションをつけて見やすくしてみました
#あまりそうでもないかもしれない
    • good
    • 0
この回答へのお礼

なるほど!!
すばやい回答ありがとうございます。

お礼日時:2008/03/18 00:20

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