ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:hulihalj 正規表現による文字列の抽出
困り度:
  • すぐに回答を!
$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";}
質問投稿日時:08/03/17 22:57
質問番号:3872069
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:sakusaker7 #1の例は質問者さんのスクリプトを最大限活かそうと思ってのものですので、
#2の方のコメントも踏まえつつお好きに改変してくださいませ >質問者様
種類:アドバイス
どんな人:経験者
自信:参考意見
回答日時:08/03/18 01:40
回答番号:No.3
この回答へのお礼ご親切にどうもありがとうございます。

回答

良回答10pt

回答者:Tacosan //g を配列コンテキストで使うと「キャプチャした部分を全てまとめたリスト」になるはずなので, while のところは実は
my @arr = ($data =~ /.../gi);
でいいような気がします>#1.
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/18 00:14
回答番号:No.2
この回答へのお礼そういう書き方もできるのですね。
参考になります。
ありがとうございます。

回答

良回答20pt

回答者:sakusaker7 だいぶ混乱しているみたいですね。
ピリオドが変な具合に入ってます。
マッチングで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オプションをつけて見やすくしてみました
#あまりそうでもないかもしれない
種類:回答
どんな人:経験者
自信:参考意見
回答日時:08/03/18 00:06
回答番号:No.1
この回答へのお礼なるほど!!
すばやい回答ありがとうございます。
 
最新から表示回答順に表示良回答のみ表示