- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HTMLからimgのsrcのみを正規表現で抽出する)
HTMLからimgのsrcのみを正規表現で抽出する
このQ&Aのポイント
- Javaの勉強がてら作成しているWebサイトから画像だけをダウンロードするツールで、HTML内のimgタグのsrcを抽出したい。
- 現在、正規表現を使ってimgタグのsrcを抽出し、一覧を取得するメソッドを作成しているが、うまくできず困っている。
- テストHTMLにおいて最後の1件しか取得できず、正規表現が正しくない可能性がある。解決策を知りたい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
正規表現 /<\s*img.*src\s*=\s*(["'])?([^ "']*)[^>]*>/ ですが、 非常に危険な /.*/ という指定を含んでいます。 これは「可能な限り長く一致させる」挙動となるので、 例題の場合なら以下の範囲を纏めて拾ってしまいます。 <img(ここから) src="..."><img src="...">...<img (ここまで)src="ttp://fuga/hoge.jpeg"> なので /.*/ ではなく /[^>]*/ とすれば想定どおりの挙動となるでしょう。 余談ではありますが、 この種の処理を行うなら HTML パーサーを介して、 DOM なり XPath を使うことをオススメします。
その他の回答 (2)
- goro123123123
- ベストアンサー率8% (1/12)
回答No.2
なんでわざわざ正規表現? DOM使った方が良いんじゃないのか?
質問者
補足
お返事ありがとうございます。 パーサを利用した解析についても調べていた中に入ってはいましたが、理由としては長いプログラムになり初心者の私の頭では追いつかなかったため、今回は選択肢から外しました(^^;) 以下に拝見していたサイトを引用させていただき、後学の課題とさせていただきます。 http://d.hatena.ne.jp/excer/20110410/1302416295
- notnot
- ベストアンサー率47% (4900/10358)
回答No.1
Pattern p = Pattern.compile("<\\s*img.*src\\s*=\\s*([\\\"'])?([^ \\\"']*)[^>]*>"); の img.* がおかしい。 img[^>]* では?
質問者
お礼
お返事感謝です。 ご指摘の箇所を修正したところ想定どおりに動きました。 助かりました、有難うございました。
お礼
ご丁寧な解説ありがとうございます。 非常に分かりやすく勉強になりました。 今回はimgのurlのみが必要でしたので、パーサについてはNo.2の方に返答しておりますとおりのため、私の今後の課題としたいと思います。 本当に有難うございました。