HTMLから正規表現で必要な情報を取得したい

このQ&Aのポイント
  • HTMLから(A)~(J)の値を取得する方法を教えてください。
  • PHPで正規表現を使ってHTMLから(A)~(J)の値を取得する方法を教えてください。
  • PHP5を使用して、HTMLの(A)~(J)の値を取得する方法を教えてください。
回答を見る
  • ベストアンサー

HTMLから正規表現で必要な情報を取得したい

以下のようなHTMLがあり、PHPで正規表現を使い(A)~(J)の値を取得したいのですが、 どのような正規表現を書けば取得できるか迷っています。 正規表現でなくとも取得できる方法があればご教示ください。 どうかお願いいたします。 ※ちなみにPHP5です。 ---------------------------------------------------------- ~省略~ <tr bgcolor="#ffffff"> <td align="center">(A)<br></td> <td align="center">(B)<br></td> <td align="center">(C)<br></td> <td><a href="http://aaaaa.co.jp">(D)</a><br></td> <td align="right">(E)</td> <td align="right">(F)<br></td> <td align="right">(G)</td> <td align="right">(H)</td> <td align="right">(I)</td> <td align="center" nowrap><font color="#FFFFFF">(J)</font></td> </tr> ~省略~

  • PHP
  • 回答数2
  • ありがとう数2

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

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

たとえばこんな感じ <? $html=<<<eof <tr bgcolor="#ffffff"> <td align="center">(A)<br></td> <td align="center">(B)<br></td> <td align="center">(C)<br></td> <td><a href="http://aaaaa.co.jp">(D)</a><br></td> <td align="right">(E)</td> <td align="right">(F)<br></td> <td align="right">(G)</td> <td align="right">(H)</td> <td align="right">(I)</td> <td align="center" nowrap><font color="#FFFFFF">(J)</font></td> </tr> eof; preg_match_all("/<td(?:\s+.*?)*>.*?<\/td>/",$html,$matches); $array=$matches[0]; foreach($array as $key=>$val){ $array[$key]=strip_tags($val); } print_r($array); ?> ようはtdタグに挟まれた文字列を取得して、タグをあとから外す。 ただし(A)~(I)がタグを含む場合は別のアプローチが必要です

msak777
質問者

お礼

返事が遅くなり申し訳ございませんでした。 教えていただいた方法で実現できました。 strip_tagsでタグを削除する発想がなかったのでとても勉強になりました。 ありがとうございました。

その他の回答 (1)

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

この場合どのような値(配列?)が返ってくることを期待していますか? 補足が必要です。

msak777
質問者

補足

回答ありがとうございます。補足させて頂きます。 (A)~(J)の値が格納された連想配列または配列が返ってくれば嬉しいです(理想は連想配列)。 例えば) array = { 'A' => (A), 'B' => (B), 'C' => (C), (略) } または、 array[0] = (A) array[1] = (B) array[2] = (C) 個人的にはpreg_match_allを利用して実現できそうな気がするのですが、 実力不足で上手くできませんでした。 他にXPathなども考えてみましたが、難しいです。

関連するQ&A

  • VBAでホームページに表示された情報をセルに分割して取得していきたいのですのですがどのように記述したらよろしいでしょうか。

    宜しくお願い致します。 HTMLを長々と記述しておりますが、お許しください。 VBAでホームページに表示された情報をセルに分割して取得していきたいのですのですがどのように記述したらよろしいでしょうか。 以下のようなHTMLがありまして、エクセルのWEBクエリを利用して取得していこうかと思ったのですが、エラーが表示されてしまいうまく取得することができませんでした。 そこで、ブラウザコントロールでしたら、ページが表示された時点で、 すべての情報の取り込みが完了してますので、HTMLをうまく解体すればセルに情報を格納できるかと思ったのですが、どのようにデータを解体・取得すればいいのかが分からない状態ですので、是非御教授いただけたらと思っております。 なお、以下のHTMLは一行目に項目二行目にその項目に基づいた情報が記載されておりまして、今回は二行目までの記述となっておりますが、基本的には複数行にわたるものとなっておりますので、是非その点に関しても踏まえたうえでのアドバイスをいただけたらと思っております。 ご面倒をおかけいたしますが、何卒宜しくお願い致します。 <TABLE width="100%" border="1" cellspacing="1" cellpadding="3"> <TR bgcolor="#006633"> <TD align="center" nowrap><FONT color="#FFFFFF">訂正<BR>取消</FONT></TD> <TD align="center" width="11%"><FONT color="#FFFFFF">口座区分</FONT></TD> <TD align="center"><FONT color="#FFFFFF">銘柄</FONT></TD> <TD align="center" width="13%" nowrap><FONT color="#FFFFFF">取引区分<BR>執行条件</FONT></TD> <TD align="center" width="5%"><FONT color="#FFFFFF">売買</FONT></TD> <TD align="center"><FONT color="#FFFFFF">発注数[株]</FONT></TD> <TD align="center"><FONT color="#FFFFFF">値段[円]</FONT></TD> <TD align="center" width="8%"><FONT color="#FFFFFF">受付日時</FONT></TD> <TD align="center" width="5%"><FONT color="#FFFFFF">有効期間</FONT></TD> <TD align="center" width="5%"><FONT color="#FFFFFF">状態</FONT></TD> <TD align="center"><FONT color="#FFFFFF">約定<BR>数量[株]-単価[円][時間]</FONT></TD> </TR> <TR bgcolor="#CCCCCC"> <TD align="center" valign="middle" bgcolor="#CCCCCC"><BR></TD> <TD align="center" valign="middle">**</TD> <TD align="center" valign="middle"><A href="/servlet/ITS/direct/DirectStkOrder;********************・・・・" onClick="return linkCheck()"><FONT color="#211799"><B>*****</B><BR>*****/FONT></A></TD> <TD align="center" valign="middle">**<BR>-</TD> <TD align="center" valign="middle"><FONT color="#990000"><B>*</B></FONT></TD> <TD align="right" valign="middle">****</TD> <TD align="right" valign="middle">****</TD> <TD align="center" valign="middle">**/**<BR>*******</TD> <TD align="center" valign="middle">当日</TD> <TD align="center" valign="middle"><B><A href="/servlet/ITS/stock/StkOrderDetail**********************・・・・・" onClick="return linkCheck()"><FONT color="#211799">**</FONT></A></B></TD> <TD align="right" valign="middle"><BR></TD> </TR> </TABLE>

  • HTMLについて教えて下さい。

    上のブルーのラインを削除したいのですが、どこを削除すれば良いか教えて下さい。 <center><table width=640 bgcolor=#ffffff cellspacing=1 cellpadding=5><tr><td bgcolor=#ACE6FF colspan=2 align=center><b></td></tr><tr><td bgcolor=#ffffff colspan=2 align=center><font size=2 color=#777777></font></td></tr></table><br><a href="http://myauc.jp/user/gakuensalon?t=%83o%83X%83%7D%83b%83g" target=_blank><img src=http://image.auctions.yahoo.co.jp/banner.gif border=0><br><font size=2><BR>この他にも出品しておりますので宜しければご覧ください。</font></a><br><br></center>

  • HTMLタグだけにマッチする正規表現を知りたい

    <td align="right" nowrap>12,345</td><td align="right" nowrap>234,567</td><td align="right" nowrap>456,789</td> といったHTML文から正規表現で数字の部分だけ抜き出して、配列に格納したいのです。 イメージとしては $matchs[0] = 12,345 $matchs[1] = 234,567 $matchs[2] = 456,789 となります。 当方で、書籍を参考に preg_match("/<td align=\"right\" nowrap>/i", $line); と正規表現を書いてみたのですが全然ヒットしません。 正しい書き方があるのでしょうか?

    • ベストアンサー
    • PHP
  • テーブルの線について

    下記のようなHPをつくっています。 一番大きなテーブルの上下の線を消すにはどこをどのようにすればいいのでしょうか? ご回答いただけると嬉しいです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <title></title> <style type="text/css"> <!-- BODY TD { FONT-SIZE: 10pt } A.menu:link,A.menu:visited { BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 15px; BORDER-TOP: #666666 1px solid; DISPLAY: block; PADDING-LEFT: 15px; PADDING-BOTTOM: 5px; BORDER-LEFT: #666666 1px solid; COLOR: #ffffff; PADDING-TOP: 12px; BORDER-BOTTOM: #666666 1px solid; HEIGHT: 40px; BACKGROUND-COLOR: pink; TEXT-DECORATION: none } A.menu:hover,A.menu:active { BORDER-RIGHT: #ffffff 1px ridge; PADDING-RIGHT: 15px; BORDER-TOP: #ffffff 1px ridge; DISPLAY: block; PADDING-LEFT: 15px; PADDING-BOTTOM: 5px; BORDER-LEFT: #ffffff 1px ridge; COLOR: gray; PADDING-TOP: 12px; BORDER-BOTTOM: #ffffff 1px ridge; HEIGHT: 40px; BACKGROUND-COLOR: #ffffff; TEXT-DECORATION: none } --> </style> </head> <body bottommargin="0" background="sozai/kabegami.gif" topmargin="0"> <table height="100%" cellspacing="1" cellpadding="1" width="730" align="center" bgcolor="#c0c0c0" border="0"> <tr> <td bgcolor="#ffffff" colspan="2"> </td> </tr> <tr> <td bgcolor="#ffffff" colspan="2" height="120" background="sozai/title_back.gif"> <p align="center"><img height="50" alt="" src="sozai/title.gif" width="369" border="0"></p></td> </tr> <tr> <td bgcolor="#ffffff" colspan="2" valign="top" align="left"><br> <table cellspacing="0" cellpadding="0" width="155" align="left" border="0"> <tr> <td> <table style="MARGIN-TOP: -2px; FONT-WEIGHT: bold; WIDTH: 146px; FONT-FAMILY: 'mspゴシック'; HEIGHT: 241px" cellspacing="3" cellpadding="0" width="146" align="center" border="0"> <tr> <td style="BORDER-RIGHT: #666666 1px solid; PADDING-RIGHT: 15px; BORDER-TOP: #666666 1px solid; PADDING-LEFT: 15px; PADDING-BOTTOM: 10px; BORDER-LEFT: #666666 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #666666 1px solid" align="center"><font color="gray">Top</font></td> </tr> <tr> <td><a class="menu" href="">News</font></a></td> </tr> <tr> <td><a class="menu" href="">作品集</font></a></td> </tr> <tr> <td><a class="menu" href="">お教室情報</font></a></td> </tr> <tr> <td><a class="menu" href="">Shopping</a></td> </tr> <tr> <td><a class="menu" href="">お友達サイト</a></td> </tr> </table> <p align="center"> <img src="http://counter1.fc2.com/counter_img.php?id=47426"><br> </p></td></tr></table> <table cellspacing="1" bgcolor="#c0c0c0" border="0" cellpadding="20" width="565" align="left"> <tr> <td bgcolor="#ffffff" ><br> <br><br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br><br> <br> </td> </tr> </table> </td></tr> <tr> <td bgcolor="#ffffff" colspan="2"> <p align="center"> <font color="#808080">Copyright &copy; 2005-2007 princess-ichigo, All rights reserved.</font></font></p></td> </tr> <tr> <td bgcolor="#ffffff" colspan="2"><br> </td> </tr> </table> </body></html>

    • ベストアンサー
    • HTML
  • JSPでの文字列編集出力

    JSPで文字列を読み込み、一部編集してデータベースに出力させようとしています。現在、文字列の編集の部分でうまくいかず困っています。 <tr> <td align="center"> </td> <td align="center">C 1</td> <td align="center">C 2</td> </tr> <tr> <td><font color="#FFFFFF">_</font>コスト</td> <td align="right"><font color="#FFFFFF">_</font>\ 200000<font color="#FFFFFF">_</font></td> <td align="right"><font color="#FFFFFF">_</font>\ 300000<font color="#FFFFFF">_</font></td> </tr> の内容を読み込み、タグを取り除き<tr>ごとに次の行として ,C 1,C 2 _,コスト,_,\200000,_,_,\300000,_ のように出力したいのです。 現在、String型で"<td"や">"と指定し、substring()やindexOf()を使いやっているのですが、 <td align="right"><font color="#FFFFFF">_</font>\ 300000<font color="#FFFFFF">_</font></td> のような、同じ行に2度出てくると初めしか文字列を取らなかったりしてうまくいきません。 違う方法や、アドバイスなどないでしょうか?また、XMLのDOMを使った方がいいのでしょうか?(XMLは全くわからないのですが、DOMを使えばもっと簡単にできるのでしょうか?) よろしくお願いします。

    • ベストアンサー
    • Java
  • HTMLについて

    HTML初心者です。いろいろ調べながら下記の画像のテンプレートを作っているのですが、1枠と2枠の頭が揃いません。わかる方教えてください。画像が見づらいかもしれませんが宜しくお願い致します。 <html> <body> <br><center> <font size="6" color="#00000"> <b>タイトル</b> </font> <hr> <br><br> <table width="800" height="500" cellpadding="15" cellspacing="10" BORDER="4" bgcolor="F3F30E"> <tr> <td width="50%" rowspan="4" BGCOLOR="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 1 </u></b></font> <br><br> <font size="3" color="#00000"> </font> </td> </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 2 </b></u></font> <br><br> <font size="3" color="#00000"> </font> </td> </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 3 </b></u></font> <br><br> <font size="3" color="#00000"> </font> </td </tr> <tr> <td width="50%" bgcolor="F2F276" ALIGN="left" VALIGN="top"> <font color="#00000" size="4"><b><u> 4 </b></u></font> <br><br> <font size="3" color="#00000"> <b></b> </font> </td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • VBで正規表現

    VBで正規表現 下記のような文字列がTextBoxに入力されています。 <a></a>で囲まれた部分の抽出は出来ましたが、 <td></td>タグで囲まれた’18’も取り出したいのですが正規表現ではどの様に記述すれば宜しいでしょうか? 関係有りそうなコードはこれです。 Regex("<a href=""(?<url>.*?)"".*?>(?<text>.*?)</a>" ---------------------------------------- <TR bgcolor=#ffffff> <TD> 18 </TD> <TD><a href="main.py?qtype=userpage&teamnum=162&username=KOTOKO"> KOTOKO </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=11379753" target="_blank"> 11379753 </a> </TD> <TD><a href="http://fah-web2.stanford.edu/awards/cert.php?u=KOTOKO&pts=16190&t=wus&bg=3" target="_blank"> 16190 </a> </TD> </TR> ----------------------------------------

  • Mac IEのバグなのでしょうか?

    TMEspionです。 <table border="0" cellpadding="5" cellspacing="5"><tr><td width="100" align="left" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td><td width="100" align="center" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td><td width="100" align="right" bgcolor="#999999"><table width="50" border="0" cellpadding="5" cellspacing="5"><tr><td align="left" bgcolor="#FFFFFF">左</td></tr><tr><td align="center" bgcolor="#FFFFFF">中</td></tr><tr><td align="right" bgcolor="#FFFFFF">右</td></tr></table></td></tr><tr><td align="left" bgcolor="#999999">左</td><td align="center" bgcolor="#999999">中</td><td align="right" bgcolor="#999999">右</td></tr></table> --------------------------------- 上記のソースの様に、テーブルを縦2段、横2列にセルを作り、上段はテーブルタグ、下段はテキストでそれぞれalign属性をleft、center,rightと設定しています。 ところがInternet Explorer 5.2 for Macで見ると、 上段右のテーブルタグは「align="right"」の効果が出ていません。 この質問を呼んでいる回答者様には、ブラウザでどう表示されるんでしょうか? どう表示されたかという結果とブラウザ名を教えて下さい。

    • ベストアンサー
    • HTML
  • Dreamweaverのデザインで表示がおかしい時

    IEだと綺麗に表示されるけど、Dreamweaverのデザインで見ると表示がおかしい時って結構あり困ってます。 ソースフォーマットとかやってもやはり駄目です。 今回の場合、どのタグが悪そうでしょうか? <HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> </HEAD> <BODY> <BR> <BR> <BR> <TABLE align="center" cellSpacing=0 cellPadding=0 width="95%" bgColor=#0066cc border=0> <TBODY><TR><TD> <TABLE cellSpacing=2 cellPadding=1 width="100%" border=0> <TBODY> <TR bgColor=#0066cc> <TD align=middle><SMALL><B><FONT color=#ffffff> テキストツール </FONT></A></B></SMALL>&nbsp; </TD></TR> <TR bgColor=#ffffff> <TD align=middle> <TABLE height="400" cellSpacing=0 cellPadding=1 width="95%" border=0> <TBODY> <TR valign=top> <TD width="100%" valign="center" align="center"> <BR><A>トップページ</A><BR><BR> </TD> </TR> <TR valign=top> <TD width="100%" valign="top" align="center"> <A HREF="list">あ</A><BR><BR> <A HREF="clist">い</A><BR><BR> <A HREF="slist">う</A><BR><BR> </TD> </TR> </TD></TR></TBODY></TABLE> </TD></TR></TBODY></TABLE> </TD></TR></TBODY></TABLE> </BODY></HTML>

  • HTMLで表を横並びにしたくて、下記のような表を作りました。

    HTMLで表を横並びにしたくて、下記のような表を作りました。 この表をもう一つ右隣に作りたいのですが、どうもうまくいきません。 何を付け足せば横に並んでくれるのでしょうか? <table style= width="500" bgcolor="#007500" cellspacing="1" cellpadding="5"> <tr> <td bgcolor="#e5ffe5" width="120"><font color="#000000"><strong><a href="紹介したURL">ああああ</strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>ああ<br></strong></font></td> </tr> <tr> <td bgcolor="#e5ffe5"><font color="#007500"><strong><a href="紹介したいURL">ああああ</a> </strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>ああ<br></strong></font></td> </tr> <tr> <td bgcolor="#e5ffe5"><font color="#000000"><strong><a href="index.html"></strong></font></td> <td bgcolor="#ffffff"><font color="#000000"><strong>あああああ</strong></font></td> </tr> </table><br> </tr>