URL抽出方法:一つの行にURLが複数ある場合の解決策

このQ&Aのポイント
  • htmファイルからリンクされたURL情報を抽出する方法についてご相談です。
  • 正規表現を使用して<a href>タグを一つ抽出する方法はわかりましたが、複数のURLがある場合の対応方法が分かりません。
  • 具体的には、一つの行に複数の<a href>タグがある場合の最適な抽出方法を教えてください。
回答を見る
  • ベストアンサー

一つの行にURLが複数ある場合の、URL抽出方法は?

htmファイルの中から、リンクされたURL情報を抽出するのが今回の目的です。 ご相談したいのは、URL情報が一つの行中に複数ある場合の抽出方法です。 ちなみに「一つの行にある<a href>リンクが一つだけ」の場合ですと、正規表現 <a +href=('|\").*('|\") *> でURLデータを正しく抽出できるところまで来ています。 ですが一つの行にある<a href>リンクが2つ以上あった場合は、最長一致のルールに従って、うまく抽出できません。 具体的に申し上げると、 ケース1:<a href="www.hoge.htm">ほげ</a> <a href="www.hoge.htm"> が抽出できる。 ケース2:<a href="www.hoge.htm">ほげ</a><a href="www.hogehoge.htm">ほげほげ</a> <a href="www.hoge.htm">ほげ</a><a href="www.hogehoge.htm"> が抽出される。(本当は2つを別々に取り出したい)

  • kumar
  • お礼率21% (19/87)

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

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

'' もしくは "" の間の条件を .* から [^'\"]* に変更して ' か " があった場合を除外すればできます。 ちなみに [^'\"] は「 ' か " 以外の文字列」です。 <a +href=('|\")[^'\"]*('|\") *>

kumar
質問者

お礼

早速のアドバイスまことに有り難うございます。 お陰様で上手くいきました!

関連するQ&A

  • <a href>タグ内のURL抽出

    正規表現初心者です。ご教授よろしくお願いします。 <a href=http://hoge.com/hoge>hoge</a> <a href=http://hoge.com/hoge>hoge<br>hoge</a> 以上の<a href>リンクから、それぞれURLだけを抽出したいのですが うまくできません。 ereg("<a href=(.+)>(.+)</a>",$hoge,$a); echo $a[1]; で、1つ目はURL抽出できたのですが 2つ目のように<br>があると『 http://hoge.com>hoge 』と表示されてしまいます。 このような場合、どのようにして抽出すればよいのでしょうか??

    • ベストアンサー
    • PHP
  • PHPの正規表現で一部のURLを抜き出したい

    <a href="../hoge/hoge/hoge123.htm">テスト1</a><br> <a href="../hoge/hoge/hoge124.htm">テスト2</a><br> <a href="../hoge/hoge/hoge125.htm">テスト3</a><br> <a href="../hoge/hoge/hoge126.htm">テスト4</a><br> <a href="../hoge/hoge/hoge127.htm">テスト5</a><br> このような文字列があり「../hoge/hoge/hoge126.htm」だけをマッチさせたい場合はどのような正規表現を書けばよいでしょうか?回答宜しくお願いします。 *URL内の文は使わず、テスト1、テスト2・・・と<a href="、">を使ってくださいお願いします。

    • 締切済み
    • PHP
  • preg_match と正規表現 で URL抽出

    HTMLのデータが入っている変数 $data から、一番初めにでてきた<img>タグに囲まれるURLと、そこに<a>タグがある場合はそのリンク先のURLを取得させたいのですが、もし<a>のない場合のケースでどう条件付ければよいかわからず、困っています。 <? $data = "<html><head></head><body>こんにちは、元気ですか? <a href=\"http://www.hoge.co.jp\"><img=\"http://www.hoge.co.jp/hoge.jpg\"></a> <img=\"http://www.hoge02.co.jp/hoge02.jpg\"> </body></html>"; if (preg_match("#<a href=\"(.+)\"><img=\"(.+)\"></a>#", $txt, $reg)){ $link = $reg[1]; $url = $reg[2]; } echo "URL = {$url}<br> LINK = {$link}"; ?> この場合、一番初めに出てきた hoge.jpg のURLとLINK両方取得してくれますが、もし hoge02.jpg が先に来た場合、そのURLを取得させるようにしたいのですが可能でしょうか? もし何かご存知の方おられましたらどうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで<a>タグ内からURLと文字を抜き出したい

    PHP4.3で $html_tag = '<a href="http://www.hogehoge.com/hogehoge/hoge/sample.html" class="hogehoge" title="hogehoge">りんく先名称</a>'; というような変数から 「http://www.hogehoge.com/hogehoge/hoge/sample.html」 のURLと 「りんく先名称」という<a>で囲まれた文字列を抜き出したいのです。 preg_matchを使っていろいろやってみたのですが、どうもうまくいきません。というか、正規表現がどのように書いていいのかわからないのですが・・・ そもそもpreg_matchを使わずとも簡単な方法があるのでしょうか? 大変恐れ入りますが、ご教授いただけませんでしょうか?

    • ベストアンサー
    • PHP
  • コードをもっとスマートにする方法はありませんか?

    PHPを学び始めた者です。 現在自サイトのリンク集を動的に作成しております。 各ページのURLを読み込み特定URL文字があった場合は書き換えを行なっているのですが、数が多くなり(300件以上)コードが増えてきました。 出来るだけ管理しやすくスマートにしたいのですが何か方法ありませんか? ~略~ if(strstr($item['link'], "hoge1.")){ $blog = "<a href=\"http://hoge1.hogehoge.com/\">hoge1さん</a>"; }elseif(strstr($item['link'], "hoge2.")){ $blog = "<a href=\"http://hoge2.test.com/\">hoge2さん</a>"; }elseif(strstr($item['link'], "test3.")){ $blog = "<a href=\"http://test3.hogehoge.com/\">test3さん</a>"; }elseif(strstr($item['link'], "/")){ $blog = "<a href=\"http://#\">未登録</a>"; }; ~略~

    • 締切済み
    • PHP
  • 正規表現でのURLの抽出方法について

    下記のような、ドメインとURLの最後の部分(/dataの部分) が一緒で、途中の表記が違うURLがあったとします。 http://hogehoge.com/aaa/data http://hogehoge.com/aaa/bbb/data http://hogehoge.com/ddd/eee/data このようなURLを正規表現を使って抽出するには、どのように記述したらいいしょうか。

  • 同行のurlの片方にアンカーをつける正規表現

    正規表現について、同じ行のurlの片方だけにアンカーをつけるには http://hoge.jp/ http://hoge2.jp/ http://hoge3.jp/ http://hoge4.jp/ こういう行があったとして、 http://hoge.jp/ <a href="http://hoge2.jp/">http://hoge2.jp/</a> http://hoge3.jp/ <a href="http://hoge4.jp/">http://hoge4.jp/</a> こういう結果を得たいですが、可能でしょうか

  • preg_replace内+URLエンコード

    現在、 $hogehoge=preg_replace( "/([^,\(\)]+)/" , '<a href="./hoge.php?hoge=\1">\1</a>', $hoge); このように変数をそのままリンク処理しております。 現在はこの変数に1バイト文字のみしか入っていないのですが、今後2バイト文字も取り扱おうつもりですので、urlencode関数を使いURLエンコードを組み込みたく思います。 このままのカタチで組み込むことは可能でしょうか?

    • 締切済み
    • PHP
  • VBAでWEBページのURL抽出について

    エクセルのVBAにおいてWEBページのURLを抽出するマクロを考えております。 具体的に言うと、下記のようなwebページのタグがある中でhrefで参照しているURLを抽出したいと考えております。 <a class="" href="">あいうえお</a> GetelementByClassNameを使うことで文言の抽出はできるのですが、リンク先の抽出はできないのでしょうか?

  • 正規表現でURLを抽出するには。

    正規表現でURLを抽出するには。 HTML内リンク先などのURLを正規表現で抽出したいのですが。 HTML内で表記されているURLはhttpやhttps以外にも相対URLなど様々な書き方が できるようですが、それらを抽出する正規表現パターンはどの様に書けばよいのでしょうか?

    • ベストアンサー
    • Perl