• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:htmlソースからアンカータグ内のURLを配列に)

HTMLソースからアンカータグ内のURLを配列に

このQ&Aのポイント
  • file_get_contents()で取得したhtmlファイルのソースにある、アンカータグに設置されている、URLおよび、そのアンカータグに囲まれたテキストを取得して配列に収めたいと考えている。
  • アンカータグ内のURLとテキストを取得する方法を調べているが、目的の結果を出せずにいる。
  • アンカータグ内にtarget属性などの記述があると配列に収めることができない状況。対処方法を知りたい。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

配列の中に配列がある場合は多元的に[]をつけてアクセスします。 <? $a=Array(Array("a","b","c"),Array("x","y","z")); print_r($a); print $a[1][1]; ?> PHPの参考書であれば基本事項として書いてあると思いますが もしお持ちでなければ、1冊手元におかれてはどうでしょうか?

mayu_chap
質問者

お礼

yambejpさんへ お世話になっております。引き続き、早速のご回答をありがとうございます。 多次元配列ですか・・お恥ずかしいながら初めて耳にいたしました。書籍も何冊かもっておりますが、すべてDBとの連携に関するものなため、PHPの専門書でも購入したいと思います。 なお、今回の件につきましては、yambejpさんのヒントを元に、いろいろと検索して思うような結果を得ることが出来ました。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえばこんな感じ? $pattern = '/<a .*?href="(.*?)".*?>(.+?)<\/a>/is';

mayu_chap
質問者

お礼

yambejpさんへ おはようございます。早速の対応をありがとうございます! これまで何度か正規表現について(だけではありませんが^^;)yambejpさんからご指導いただいてますが、素晴らしいです。ありがとうございました! ところで、質問にも書いておりますが、ただ単純に$matchをfor文で呼び出すと、配列の中に配列形式のものが収まっているのですが、初めて見るもので、その分解?方法が分からずにいる次第です。 もちろん私自身も検索などで調べてはいるのですが、キーワードが不適切なためか、あまりにも初歩的な問題なためか、具体的な例を探すまでに至っておりません。 お忙しいなか恐縮ですが、こちらも併せてアドバイスいただければ幸いです。よろしくお願い申し上げます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • htmlソースからタグ内のテキストを配列に2

    お世話になっております。 昨日も同じような質問をさせていただいたのですが、htmlファイルの内容をPOSTで取得したとき、そのソース内にある、javascript、noscriptがあった場合、それぞれのタグ内にあるURLを配列内に取り込みたいと考えております。 そこで、これまで試していたものはもちろん、先日お教えいただいた以下のソースを参考にしているのですが、URLを取得するまでに至りません。 <?php $html=<<<_HTML_ <SCRIPT TYPE="text/javascript" SRC="http://www.○○○.com" charset="EUC-JP"></SCRIPT> <NOSCRIPT> <div align="center" style="font-size:12px;"> <a href=http://www.△△△.net/>カウンター</a> <a href=http://www.□□□.com/>アクセス解析</a> </div> </NOSCRIPT> _HTML_; $pattern_java = '/<SCRIPT TYPE= .*?SRC="(.*?)".*?>>/is'; $match_java = array(); preg_match_all($pattern_java, $html, $match_java, PREG_SET_ORDER); $meta_java = $match_java[0][1]; $cnt_java = count($match_java); ?> 2日続けて同じような質問をすることに恐縮するとともに、お恥ずかしいことと自覚はしているものの、解決策が見いだせずに困っています。 お忙しいなか恐縮ですが、アドバイスなど頂戴出来れば幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • 不要な配列を消したい

    2次元配列で、不要な要素を取り除きたいのですが良い方法が思い浮かばず、どうしたものかと悩んでいます。 一番初めと5番目を消したいのですが、preg_match で日付の2006にマッチしない要素をunsetしてみましたがうまくいきませんでした。 $data = array ( array('<br>'), array("2006 03 22", test), array("2006 03 23", test2), array("2006 03 25", test3), array('') ); $pattern = '/2006/'; foreach($data as $key => $value) { if(preg_match($pattern, $value[$key])) { unset($data[$key]); } } もし方法をご存知のかたおられましたらよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 配列の作り方について

    知識のある方に是非とも配列の作り方について ご教示いただきたいです。 <ul id="hoge"> <li><a href="#number1">テキスト1</a></li> <li><a href="#number2">テキスト2</a></li> <li><a href="#number3">テキスト3</a></li> </ul> このコードをJqueryで以下のように、 各々のURLとテキストの中身を配列に入れたいのですが どうjqueryを組めば良いかご教示頂けますでしょうか。 [number1,テキスト1] [number2,テキスト2] [number3,テキスト3] 申し訳ございませんが宜しくお願い致します。

  • PHP:preg_match_allで複数条件指定

    preg_match_allで複数条件を設定する方法についてお尋ねします。 環境 PHP:5.1.6 MySQL:5.0.77 --------ソース例------------------------------------------ <a href="1000/23">1: 【国語】接続後について (授業1) (20)</a> <a href="1000/26">2: 【数学】分数 (206)</a> --------------------------------------------------------- 上記のようなHTMLソースを分解してMySQLに登録することを考えています。 (1行目) 1000/23 | 1 | 【国語】接続後について (授業1) | 20 (2行目) 1000/26 | 2 | 【数学】分数 | 206 という形に a hrefの中身 |スレッド番号 | タイトル | コメント数 4つに分解してMySQLに登録します。 正規表現を学んで、個別にデータを取り出すことはできました。 以下に作成したソースを記載します。 $contents='<a href="1000/23">1: 【国語】接続後について (授業1) (20)</a><a href="1000/26">2: 【数学】分数 (206)</a>'; preg_match_all( '/<a href="(.*?)">/su', $contents, $match ); foreach ( $match[ 1 ] as $var ) { echo htmlspecialchars($var)."<br>"; } preg_match_all( '/">([0-9]*?):/su', $contents, $match2 ); foreach ( $match2[ 1 ] as $var2 ) { echo htmlspecialchars($var2)."■<br>"; } preg_match_all( '/[0-9]: (.*?)\([0-9]*\)<\/a>/su', $contents, $match3 ); foreach ( $match3[ 1 ] as $var3 ) { echo htmlspecialchars($var3)."■<br>"; } preg_match_all( '/\(([0-9]*?)\)</su', $contents, $match4 ); foreach ( $match4[ 1 ] as $var4 ) { echo htmlspecialchars($var4)."●<br>"; } 【実行結果】 1000/23 1000/26 1 2 【国語】接続後について (授業1) 【数学】分数 20 206 1行ずつMySQLに登録したいので preg_match_all( '/条件1,条件2,条件3,条件4/su', $contents, $match ); のような形で指定して個々の値を下記の変数に入れることは可能でしょうか? ループ処理開始{ $url $num $title $res //MySQLに接続 //データ登録 }

    • ベストアンサー
    • PHP
  • 連想配列からリストを作成する関数

    連想配列からリストを作成する関数を作ろうと思っています。 関数をどのように書けばHTMLのソースのようになるでしょうか? //----- 関数 ----- function li($v) { } //----- 配列 ----- $s[0] = array( 'Google' , 'https://www.google.co.jp/' , ' - 検索エンジン' ); $s[1] = array( 'Yahoo! JAPAN' , 'http://www.yahoo.co.jp/' , ' - 検索エンジン' ); $s[2] = array( 'Goo' , 'http://www.goo.ne.jp/' , ' - 検索エンジン' ); $s[3] = array( 'ツイッター' , 'https://twitter.com/' , ' - ミニブログ' ); li($s); //----- 生成されるhtml ----- <ul> <li><a href="https://www.google.co.jp/" title="Google">Google</a> - 検索エンジン</li> <li><a href="http://www.yahoo.co.jp/" title="Yahoo! JAPAN">Yahoo! JAPAN</a> - 検索エンジン</li> <li><a href="http://www.goo.ne.jp/" title="Goo">Goo</a> - 検索エンジン</li> <li><a href="https://twitter.com/" title="ツイッター">ツイッター</a> - ミニブログ</li> </ul> //----- print_r ----- array(4) {  [0]=>  array(3) {   [0]=>   string(6) "Google"   [1]=>   string(25) "https://www.google.co.jp/"   [2]=>   string(16) " - 検索エンジン"  }  [1]=>  array(3) {   [0]=>   string(12) "Yahoo! JAPAN"   [1]=>   string(23) "http://www.yahoo.co.jp/"   [2]=>   string(16) " - 検索エンジン"  }  [2]=>  array(3) {   [0]=>   string(3) "Goo"   [1]=>   string(21) "http://www.goo.ne.jp/"   [2]=>   string(16) " - 検索エンジン"  }  [3]=>  array(3) {   [0]=>   string(10) "ツイッター"   [1]=>   string(20) "https://twitter.com/"   [2]=>   string(14) " - ミニブログ"  } }

    • ベストアンサー
    • PHP
  • 配列の作り方について

    知識のある方に教えて頂きたく存じます。 以下のようにリストが4つあり、これらのアルファベットを 大文字小文字関係なく、アルファベット順にリストを並べ変えたいのですが jqueryでどのようにやればいいかご教示頂けませんでしょうか。 <ul id="hoge"> <li><a href="#number1">C</a></li> <li><a href="#number2">ab</a></li> <li><a href="#number3">AC</a></li> <li><a href="#number4">cb</a></li> </ul> 申し訳ございませんが、 よろしくお願いいたします。

  • この2つのソースを50ページに配置したいのですが?

    (1)head内 ----------- <link href="css/navi.css " rel="stylesheet" type="text/css"> ---------- (2)body内 ----------- <div class="nv"> <ul> <li><a href="purchase.shtml">1</a></li> <li><a href="torihiki.shtml">2</a></li> </ul></div> ------------ この(1)(2)のソースを50枚のページに入力したいのですが、少しでも速い方法ないでしょうか?

  • 正規表現でアンカータグを判別

    お世話になっております。 $patern='|<a +href *= *"('.$link_url.'[^\"]*)".*?>([^<]*)</a>|'; $addstr = file_get_contents($link_page);//リンクが貼ってあるか確認する  if(preg_match($patern,$addstr)){//リンク設置済み //$link_page、$link_url共にURLが格納されている 以上のようなスクリプトの一部があるのですが、これは、$link_pageというページの中に、$link_urlを移動先としたアンカータグが設置されているか?を見るためのものなのですが、以上のようなものだとアンカータグが <a href=""></a> と、aが小文字であれば認識するものの、 <A href=""></A> このように大文字だと認識いたしません。 先のスクリプトは色々と調べて出来たものなのですが、このように大文字の場合も小文字の場合も認識するようにするにはどうしたら宜しいのでしょうか? 小文字の場合と大文字の場合とで、if文等で記述する?とも考えたのですが、これではスクリプトの量が一気に倍になってしまいスマートじゃないですし・・。 教えて君のようで恐縮ですがアドバイスなど頂戴出来たら幸いです。 お忙しい中恐縮ですが宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • htmlソースからタグ内のテキストを配列に

    お世話になっております。 $addfname = trim($_POST["url"]); $html = file_get_contents($addfname); $html = mb_convert_encoding($html,"EUC-JP","auto"); 以上のように、フォームに入力されたURLを読み込み、各タグ内に記述されたテキストなどを排出(配列に格納)しようと思い、<h2></h2>のようにh2タグで囲まれたテキストは、 $pattern = '/<h2>(.*)<\/h2>/is'; $match = array(); preg_match_all($pattern, $html, $match, PREG_SET_ORDER); $h2text1 = str_replace("<h2>", "", $match4[0][0]); $h2text2 = str_replace("</h2>", "\t", $h2text1); $h2array = explode("\t", $h2text2); $h2cnt = count($h2array)-1; とすることで、なんとか配列に格納することが出来ました。 が、しかし、CSSなどで、<h2 class="~"></h2>となっていたりすると、正常に読み込むことが出来ず、</h2>タグ以降のテキストなども読み込んでしまいます。 配列に格納する方法も、どこかぎこちないように思えたりもしますが、以上のような、idや、classなど、<h2>だけで括られている以外のテキストなども読み込むには、どのようにしたら宜しいのでしょうか? お忙しいなか恐縮ですが、アドバイスのほどよろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • Listの中に<br>を入れてはダメなのですか?

    見映えが良いようにとグレープの後ろに<br>を入れました。 <ul > <li><a href="apple.html">アップル</a></li> <li><a href="orange.html">オレンジ</a></li> <li><a href="grape.html">グレープ</a></li><br> <li><a href="index.html">TOP</a></li> </ul> これで構文チェックをかけたら致命的エラーになりました。 Listの中の<br>ってそんなに罪が重いのですか?

    • ベストアンサー
    • HTML