• ベストアンサー

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

多くのファイルで構成されている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% (1303/1774)
回答No.2

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

関連するQ&A

  • 正規表現について

    HTMLファイルを読み込み、特定の文字列にリンクを付けて出力したいのですが上手くいきません。 例: <img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に正規表現を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。  ↓正規表現をキーワードにしてリンクを付けたい。 正:<img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 誤:<img src="./seiki_hyougen.gif" alt="<a href="seiki_hyougen.html">正規表現</a>についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html"><a href="seiki_hyougen.html">正規表現</a>の詳しい説明</a>をクリックして下さい。 尚、下記URLのサンプルを参考にしてスクリプトを作成しています。 http://php.oss.eznetsols.org/manual/ja/function.preg-split.php $r = preg_split('((\/a>)|(<a))', $html, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($r); $i++) { if ($r[$i] == "<a") { $i++; continue; } $r[$i] = preg_replace( "/(正規表現)/i", "<a href='seiki_hyougen.html'>\\1</a>", $r[$i] ); } return join("", $r); この(正規表現)の部分で上手い正規表現を使えばalt="×××"の中にリンクタグが入らないようにできるのでは?と思っているのですが・・・。 どうか、良い方法を教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現 画像リンクのaltの取得

    正規表現 画像リンクのaltの取得 正規表現初心者です。 PHPでHTMLからリンクが設定された画像の alt とリンク先URLを取得するパターン作成に悪戦苦闘しています。 やりたいこと ページ上の画像(<img>)のalt のテキストを取得する。 ただし<img>タグはアンカー<a></a>で囲まれたリンクが設定されているもののみ。 要はリンクURLとaltテキストの組み合わせリストを作成することを目的としています。 ためしたこと 検索(PHPのpreg_match_allで)以下のパターンで取得を試みました。 #<a\s[^>]*?href\s?=\s?[\"\'](.*?)[\"\'].*?><img\s[^>]*?alt\s?=\s?[\"\'](.*?)[\"\'][^>]*?>#i このパターンで実行した場合.*?の指定があだとなったようで範囲が拡大され、たとえば以下のようなパターンにもヒットししまいます。 <a href="aaa">bbb</a><a href="ccc"><img alt="ddd"></img></a> これだと URL "aaa" に対するaltテキストが"ddd"という結果がになってしまい事実との矛盾が生じます。 勉強不足で恐縮ですが、アドバイスいただければ幸いです。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現について

    アメブロから独自ブログへ引越しを行うことになったのですが、 ペタしてね というリンク画像を毎ページに張り付けており、この画像リンクを一括で削除したいと思っています。 HTMLタグのパラメータが微妙にばらついており、正規表現の利用が必要かなと思っています。 専用のプラグインをインストールし、正規表現を利用して削除できることが分かったのですが、 正規表現の方法を数時間勉強してみましたが、結局どうすればいいのかわかりません・・・ 削除する画像リンクは以下のようなものです。 <a href="http://.........................."><img height="100" alt="ペタしてね" src="http://stat.ameba.jp/blog/ucs/img/decoPeta/pc/decoPeta_18.gif" width="100" /></a> width や hight がページによって微妙に違うようです。 どちらさまか、上記のようなタグをマッチングさせる正規表現を教えていただけませんでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現でフルパスを表すには?

    htmlファイルに書かれた、<a href="http://○○.html">を"<a href=link.htm">に書き換えたいと思っています。正規表現が使えるエディタがあるので、一括変換したいのですが、"http://○○.html"の表し方が分かりません。 是非、教えて下さい。宜しくお願い致します。 #URLのクォーテーションからクォーテーションまでを変換したいと思っています。

    • 締切済み
    • CGI
  • 抽出 正規表現 DOM?

    PHPの正規表現で、例えば <img src="画像ファイル名"...> のようにイメージタグのsrc部分の画像ファイル名を抽出させたいのですが、正規表現の記述の仕方がわかりません。 このようなイメージタグなのですが、imgがIMGだったり、src=画像ファイル名 のように""がなかったり、 alt, width, height, borderなど属性もありますので、正規表現で純粋に画像ファイル名を抽出するのは難しいと考えますが、ふと思ったのですが、DOM???を使えば簡単にできる?かなと思うだけでこれも実現方法がわかりません。 現在、PHP4.3を使っていますが可能でしょうか?

    • ベストアンサー
    • PHP
  • リンクした画像の大きさをしていするには?

    たとえば、 <a href="a.jpg" target="_blank"><img src="00.gif"> だとして、00.gifからa.jpgにリンクするのですが、 画像が小さいのに、大きな画面の中にその画像が はじっこに出てしまいます。 画像がぴったしになるように大きさを 指定するにはどうしたらいいのですか?

  • 直リンクとは。

    具体的にどういうことなのでしょう。 例えば<A HREF="私のサイトのアドレス"> で、 同ページでページが開くことを直リンクと言うと思うのですが。 逆に<A HREF="私のサイトのアドレス"TARGET="_Blank">という タグで別ページで開くのがいいと思うのですが。 先日相互リンクしてくれたサイトから私のサイトへ行くと、 別ページは開かず同ページで開いていました。 これは直リンではないのでしょうか? 相手先にそのことを申し出ますと、私のサイトに行く前にそのサイト内のリンク集のページでいったん別ページが開いているんです。 パソコン上ではその相手先のサイトのページが2枚開いていることになります。ややこしいですが、すいません。 で、ここからさらに私のサイトへのリンクに、"TARGET="_Blank"をつけるとパソコン上に3枚のページが開くことになるというのです。 それ自体はわかるのですが、何より気になるのはこれは直リンクではないのかということです。 直リンクでさえなければ何も問題ないと思っているので、 でもこれが直リンクか判断できないので、困っています。 御存知の方教えて下さい。よろしくお願いします。

    • ベストアンサー
    • HTML
  • 正規表現の利用方法

    Perlで指定ディレクトリ内の画像を一覧表示しするプログラムを作っています。画像は日記に使用しているもので、画像のファイル名を2007121601.jpgつまり、年・月・日・番号の様に命名ルールを決めておき、表示した画像から該当記事にリンクしたいのです。(記事はHTMLファイルで、200712.htmlの様に、年・月という命名ルールにしてあります) そのために、正規表現を使って試みているのですが、 上手く該当記事にリンクさせるところが出来ません。 ↓yyyymmddnn形式の画像を正規表現で表現 grep{ /([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})\.+(jpg$|gif$|png$)/ } ↓画像表示&記事へリンク print "<a href=\"★\"><img src=\"img/$file\"></a>\n"; ★の部分に、上の正規表現から年・月の部分、つまり、([0-9]{4})([0-9]{2})を何らかの形で抜き出して記事URL(年・月.html)を表現したいのです。どなたかお分かりでしたらご教授下さい。

    • ベストアンサー
    • Perl
  • 正規表現、htmlからリンクの相対パスのみ抜き出したい

    タイトルの通りhtmlから正規表現で 相対パスのリンクだけ抜き出したいです。 現在は「a href="([^/][^\"]+)」のようにやっています でもこれだと a href="http://xxx.xxx---" a href="mailto:---" a href="javascript:---" のような拾いたくないケースにもマッチしてしまいます。 途中に「:」が入るのをマッチさせなければいいんでしょうけど、 うまい表現が思いつきません。 このような条件でマッチさせる正規表現は どのようにすればいいでしょうか? よろしくお願いします。

  • 自分のサイトにある画像にリンクするのって・・・

    自分のサイトにある画像に<a href="1.jpg">画像</a>のようにリンクするのって、直リンクにあたりますか?

    • ベストアンサー
    • HTML

専門家に質問してみよう