• ベストアンサー

抽出 正規表現 DOM?

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

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
回答No.1

正規表現だと、以下のような感じでしょうか。 preg_match_all("/<img [^>]*src\s*=\s*[\"']?([^\"'> ]+)/i", $html, $mt); $srcs = array_map('htmlspecialchars_decode', $mt[1]); var_dump($srcs); 本来はひっかかってはならないものが検出されることや、その逆のこともあります。ですが、実用上はこんなもので十分かなと思います。 ある程度の正確性を求めるのだったら、DOMの方がよいと思います(PHP4.3でも使えます)。ただしDOMは処理が重いので、大量のHTMLファイルを処理する用途には向きません。また、DOMは、初心者の方にはとっつきづらい面もあると思います。 ですが、DOMは一度覚えれば非常に便利です。HTMLの解析処理を今後もする機会が多いのであれば、チャレンジされたらいかがでしょうか。DOMは、JavaScriptや、他の言語でも使えるので、覚えておいて損はないかと思います。 http://www.php.net/manual/ja/ref.dom.php

関連するQ&A

  • 正規表現を使いimgタグ内から幅と高さサイズを抜き出し

    正規表現を使いimgタグ内から幅と高さサイズを抜き出し phpにて正規表現を使い html の imgタグ内の width = "xxx" height = "xxx" を各々抜き出しその数字も個別に抜き出したいと思っております。 正規表現で行き詰っており、お知恵を拝借できればと思っております。 説明がわかりづらいかと思いますが、よろしくお願いしたいと思います。 下記のような文字列より <img src="http://test.co.jp/img/test01.jpg" alt="テスト画像です。" title="テスト画像です。" width="361" height="640" class="size-full wp-image-100" /> width="361" height="640" を個別に取りだし さらにその中の数字"361"を取り出したいと思っております。 正規表現に不慣れなので、お知恵をお借りいただけないでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • preg_match_allで正規表現

    preg_match_allにて、次のように<img>が連続したソースから、 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"><img width="10" src='http://b.com/b/b.gif' height="10"><img width="10" height="10" src='http://c.com/c/c.png"><img src=http://d.com/d/d.jpg><img src="http://e.com/hogefuga/e.jpg"> 個々のimgタグ全体と"<img~>"、 個々のsrc="~"のURLを抽出したいのですが、下記の条件でマッチさせることはできるでしょうか? 1. imgの属性位置・有無に問わず 2. 属性のくくりが、'" のどちらでも、または有無に問わず 3. src=~内に、"hogefuga"を含まないものにだけマッチ(否定形) 次のような正規表現で試したところ、 $pattern = '/<img.*?src=(\'|")?((?(?!hogefuga).)*\.(jpg|gif|png))(\'|")?.*?>/i'; 下のようにimgタグが1行づつ並んでいる場合は上手くいったのですが、連続して並んでいる場合は個々の、"<img~>"でマッチされませんでした。 ※URLは全てダミーです <img src="http://a.com/a/a.jpg"> <img width="10" src='http://b.com/b/b.gif' height="10"> <img width="10" height="10" src='http://c.com/c/c.png"> <img src=http://d.com/d/d.jpg> <img src="http://e.com/hogefuga/e.jpg"> 最終的にはsrc="~"のURLに応じて、画像をテキストリンクへ置換する、ということをしたいのですが、正規表現がよくわからず試行錯誤しています。 このような場合はどのような正規表現を書くべきなのでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現についての質問です。

    正規表現についての質問です。 現在、HTMLのimgタグを使って「/img/jpg/」ディレクトリにある画像ファイルを複数表示しています。 例) <img src="/img/jpg/1111.jpg" > <img src="/img/jpg/mm2222.jpg" > <img src="/img/jpg/kkkkk3333.jpg" > これをそれぞれ、以下のように置換したいと考えています。 例) <a href="http://www.xxxxx.jp/1111.jpg"><img src="/img/jpg/1111.jpg" width="240px"></a> <a href="http://www.xxxxx.jp/mm2222.jpg"><img src="/img/jpg/mm2222.jpg" width="240px"></a> <a href="http://www.xxxxx.jp/kkkkk3333.jpg"><img src="/img/jpg/kkkkk3333.jpg" width="240px"></a> imgタグをリンクタグで囲むのですが、リンク先URLには元々の画像ファイル名が使われています。また、imgタグには「width="240px"」が付加されています。 このような置換をPHP5で行うには、どのような正規表現を使用したらよろしいでしょうか。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 正規表現についての質問です。

    正規表現についての質問です。 現在、HTMLのimgタグを使って「/img/jpg/」ディレクトリにある画像ファイルを複数表示しています。 例) <img src="/img/jpg/1111.jpg" > <img src="/img/jpg/mm2222.jpg" > <img src="/img/jpg/kkkkk3333.jpg" > これをそれぞれ、以下のように置換したいと考えています。 例) <a href="http://www.xxxxx.jp/1111.jpg"><img src="/img/jpg/1111.jpg" width="240px"></a> <a href="http://www.xxxxx.jp/mm2222.jpg"><img src="/img/jpg/mm2222.jpg" width="240px"></a> <a href="http://www.xxxxx.jp/kkkkk3333.jpg"><img src="/img/jpg/kkkkk3333.jpg" width="240px"></a> imgタグをリンクタグで囲むのですが、リンク先URLには元々の画像ファイル名が使われています。また、imgタグには「width="240px"」が付加されています。 このような置換をPHP5で行うには、どのような正規表現を使用したらよろしいでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • Perlの正規表現

    Perlの正規表現 Perlの正規表現で質問です。 MT4.13を使用して携帯用サイトを構築しています。 今現在、携帯用記事中の画像を縮小して表示しようと「regex_replace」を 使って、記事中のimgタグからsrc部分を抜き出して外部のphpに飛ばしています。 <$MTEntryBody regex_replace="/<img (.*?)src=\"(.*?\.jpg)\"(.*?)>/ig","<img src="phpスクリプト?img=\\2" border="0" />"$> 記事中のjpg(JPG)画像のsrc部分を拾って、phpに渡し、GDで縮小した画像を表示すると言った感じです。 しかし、regex_replaceの正規表現部分が上手く機能していないのか、jpg画像の最後の一枚のみ変換されると言った具合です。 JPG画像も含めて、記事中全てのjpg(JPG)画像を縮小して表示したいのですが、正規表現が思い浮かばず質問しました。 上記以外にも /<img (.*?)src=\"(.*)?(\.jpg|\.JPG)\"(.*?)>/ig などとしましたが上手くいきませんでした。 ちなみに、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
  • ビルダー9 表の枠(罫線?空白?)を完全になくすには?

    会社のHPを作っています。 下記のタグを見て頂くとわかると思うのですが、 一番大きい画像と、その右の画像の間に細い線が入ってしまっています。 (ファイル名は消してあります) 最初は上下にも入っていたのですが、それはどうにか消すことができました。 (どうやったか覚えてないですけど) この線をないものとすることはできますか? 周りに詳しい人がいなくて、ほんっっとうに困ってます!助けてください(T_T) <TABLE width="785" cellspacing="0" cellpadding="0"> <TBODY> <TR align="left" bgcolor="#ffffff"> <TD colspan="4" rowspan="3" width="691" height="73"><IMG src="" width="691" height="76" border="0"></TD> <TD colspan="2" width="77"><IMG src="" width="94" height="19" border="0" hspace="0" vspace="0"></TD> </TR> <TR> <TD colspan="2" width="77"><IMG src="" width="94" height="20" border="0" hspace="0" vspace="0"></TD> </TR> <TR> <TD colspan="2" width="77"><IMG src="" width="94" height="37" border="0" hspace="0" vspace="0"></TD> </TR> <TR> <TD colspan="6" height="18"><IMG src="" width="84" height="21" border="0"><IMG src="" width="130" height="21" border="0"><IMG src="" width="156" height="21" border="0"><IMG src="" width="126" height="21" border="0"><IMG src="" width="114" height="21" border="0"><IMG src="" width="175" height="21" border="0"></TD> </TR> </TBODY> </TABLE>

  • javascript正規表現がieでうまく動かない

    imgのsrc属性を汎用的に変更したいので 正規表現を使って変更したいと思っています。 現在のimg要素をを取得して(下記、変数名currentImg)、 imgのsrc属性を以下のように末尾に_newがついたものに 変更したいと考えています。 var newImg = currentImg.src.replace(/^(.+)(\.[a-z]+)$/g,"$1_new$2"); currentImg.src = newImg; 他のブラウザではうまく行くのですが、 ie8でうまく動きません。 ieの正規表現は、何か別の書き方をしないといけないものなのでしょうか? それとも、そもそも書き方が間違っているのでしょうか? 詳しい方がいらっしゃいましたら ご教授いただけると幸いです。 どうぞ宜しくお願いいたします。

  • 正規表現で置換

    その1 $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; その2 $str = "<img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="http://yyy.hoge.jp/hage/hige/xxxx.jpg" width="320" height="240" />ほげほげ"; ↓ $str = "<img src="./foo/xxxx.jpg" width="320" height="240" />ほげほげほげ<a href="http://xxxx.xxxx.xxx/xxxx/">ほげほげほげ</a>ほげほげ<br /><br /><img src="./foo/faa/fii/xxx.jpg" width="320" height="240" />ほげほげ"; このような文字列があった時に、次のように従って置換したいです。 1.imgのタグの内部に、「http://yyy.hoge.jp/hage/hige/xxx.jpg」という文字列があった場合、「./foo/faa/fii/xxx.jpg」という文字列に置き換える。 2.それ以外のURLの場合は置換しない。 3.その1とその2では「xxx.jpg」となっていますが、jpg以外の拡張子の場合も存在する。 4.日本語とURLの位置や個数はバラバラです。 5.URLの中のxxxとyyyは不定の文字列で、hage、hoge、hige、foo、faa、fiiは固定です。 6.使用している言語はPHPです。正規表現を1度だけでできれば理想的ですが、今回は2回に渡った処理でも問題ありません。 以上です。正しく処理できる正規表現、あるいは下記の正規表現の誤りを教えて頂ければ幸いです。 お手数ですが、よろしくお願い致します。 下記の方法では、うまくできませんでした。 $pattern = "/http:\/\/.*?hoge.jp\//"; $replacement = "./"; $str= preg_replace($pattern, $replacement, $str); $pattern2 = '/\/?hage\/hoge/'; $str = preg_replace($pattern2, '/foo/faa/fii', $str);

    • ベストアンサー
    • PHP
  • PHPの正規表現について質問致します

    初歩的な質問で誠に恐れ入りますが 例えば<img src="http://abcd" width="1" height="1">が格納されている$imgの中からhttp://abcdだけを抽出する場合どうしたらいいでしょうか? srcの中はここではhttp://abcdと記述しましたが基本的に不特定です imgの要素もここではwidthとheightを記述しましたが要素の数も値も並びも不特定です src"○○○"をターゲットに出来そうな気はするのですが何分初心者なもので具現化できません どうぞご教授頂けますようよろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう