• ベストアンサー

正規表現で、画像ファイルへの直リンクだけを抽出したい

多くのファイルで構成されているhtmlのグループから、画像ファイルへの正規表現で画像ファイルへの直リンクだけを抽出したいのですが、以下のように記述したのですが、どうしても一部のhtmlファイルがヒットしてしまいます。マウスonで画像が変化するロールオーバーのリンクhtm文です。 どうすれば、確実に画像ファイルへの直リンクだけを抽出できるのでしょうか? 正規表現:<A HREF=[^>]+\.(?:jpg|gif|png)[^>]+>(.+?)</A> ヒットしてしまうhtmファイルは、最初に<a href=○○.htm とhtmファイルへのリンクが出てきて、その後にgifというロールオーバー用のファイルの拡張子が出てきてしまい、それにヒットしてしまうようなのです。 確実に最初に出てきた.gifなどの画像ファイルにヒットするようにしたいのですが、どうすればよいのでしょうか? 以下ヒットしてしまう参考ファイル <a href="./guide/guide.htm" target="_blank" onMouseOut="MM_nbGroup('out');" onMouseOver="MM_nbGroup('over','t03','f2.gif','',1);" … ><img name="t03" src="t03.gif" …></a>

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

  • ベストアンサー
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

実際に考えてみれば判ると思うけど  <A HREF=[^>]+ だけで考えたら判るよ。 ヒットしてしまうのは上記の条件を満たしてるから。 ([^>]は「>」以外の何かが1文字以上。条件は満たしてる) これを確実に回避したいっていうのが質問だけれど、hrefの値が「必ず二重引用符に囲まれている」という所謂厳密な値指定に修正したら用は足りるようになるよ。 1.href="~~" に変換 2.「>」から「"」に区切り文字を変更。 既に「"」で囲まれているなら「"」で探索する方が良いね。

simuroro
質問者

補足

SAYKAさん ありがとうございました 出来ました。 なるほど、そう考えればよかったのですね。 とても助かりました。

その他の回答 (1)

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.2

自分わこんな感じで抽出してます。 >正規表現::  href=(\"|\')?([^<|>|\"|\'|\n]+)\.(jpg|jpeg|png|gif)(\"|\')? P.S. 実際にマクロ等に組み込む時には。 最初に「href="~.***"」と記述されてる部分を抜き出して「◆◆◆~.***◆◆◆」と言う風に加工。 それから用途に応じて、拡張子で振り分けたり、必要な部分だけを別途書き出したりしてます。 あ、「◆◆◆」の部分は誤検出を防ぐために付加する判別文字列で、実際には }}}Head{{{ みたいな文字列です。