• 締切済み

phpで文字列に入ったhtmlタグの中身を取得

phpで次の文字列の中身を自分の思ったように取得したいです。 -----$textの中身 <div class="hoge">ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2</div> -----自分の実行したphpコード preg_match_all("/<div class=\"hoge\">(.*?)<\/div>/s", $text, $textArr); -----結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ -----自分の望む結果($textArr[0]) ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2 ---------------------------------- divタグの中にdivタグが入っている時、 最初の/divに反応してしまいます。ちゃんと、ほげほげ2まで取得する方法を教えてください。

  • 93129
  • お礼率33% (1/3)
  • PHP
  • 回答数1
  • ありがとう数5

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

以下を実行して結果を確認してくれたまい。 <?php $text = '<div class="hoge">ほげほげ1<div class="piyo">ぴよぴよ</div>ほげほげ2</div>'; preg_match_all("/<div class=\"hoge\">(.*?)<\/div>/s", $text, $textArr1); var_dump($textArr1); preg_match_all("/<div class=\"hoge\">(.*)<\/div>/s", $text, $textArr2); var_dump($textArr2); ?> クエスチョンマークの有無で何が変わるかが分からなければ「PHP preg_match 最短マッチ」で検索するとよろしかろう。

関連するQ&A

  • preg_match_all 複数の文字列を取得

    preg_match_all で複数の文字列を取得したい。 正規表現について勉強している者です。 preg_match_allを使って複数の文字列を取得したいのですが、 パターンの書き方に苦戦しています。 取得したいデータは以下の5つです。 一つずつであれば、どのデータも問題なく取得できますが、 2つ以上組み合わせると、抽出した結果に余計な文字が入ったり、 何も結果を返さなかったりとなってしまいます。 皆様お知恵を貸してください。よろしくおねがいします。 ///////////取得したいデータ/////////// 1つめ→○△□○△□○日本語や英語や数字△□○△□○△□○△□ 2つめ→2010/03/04(日) 16:33:48.21 3つめ→Reg1046H2556USAsantaclala 4つめ→score995 5つめ→●▲■<br> ●▲■●日本語や英語や数字▲■●▲■●<br> ▲■●▲■●▲■●▲■●<br> ▲■●▲■●▲■ 5つめには改行が入ることもあります。 /////////////////////////////////////// HTMLコード↓ <div class="cell" material="\1"></div></div> : <span style="grey"><b>○△□○△□○△□○△□○△□○△□</span></b> DATE 2010/03/04(日) 16:33:48.21 <div class="gj"><a href="www.hoge.com" class="Reg1046H2556USAsantaclala"><span class="well">domestic</span></a><div class="hollywater" name="BUFFALO"></div></div>bridge</div><div id="score995">●▲■<br> ●▲■●▲■●▲■●<br> ▲■●▲■●▲■●▲■●<br> ▲■●▲■●▲■</div>

    • 締切済み
    • PHP
  • 正規表現で特定のHTMLタグのクラスから文字列を取り出したい

    はじめまして。 現在PHP勉強中の者です。 タイトル通りクラス付けされたHTMLタグ内の文字列を取り出したいのですが、上手くいかず困ってます。 利用サーバーはコアサーバーで環境は下記通りになります。 apache:1.3.37 PHP:5.2.5 スクリプトはUTF-8、HTMLもUTF-8です。 タグは<span class="hoge">文字列</span> のような感じです。 preg_match_all("/<span class=\"hoge\">(.*)</span><\/em>/", $html, $results); こんな感じでやってるんですが引っ掛かりません。。。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHPで<title>タグ取得の動作が非常に重い

    PHPで<title>タグ取得の動作が非常に重い $html = file_get_contents($url); if(preg_match( "/<title>(.*?)<\/title>/i", $html, $match)) { } 上記のような方法で一度に(1ページ内で)30サイトほどの<title>タグを取得すると、不可がかかり、表示までにかなり時間がかかってしまいます。 preg_match では重いのでしょうか。 それとも一度に30サイトはそもそも無理があるのでしょうか。。

    • ベストアンサー
    • PHP
  • 正規表現でタグの中身を抜き出し

    <script language="php">・・・・</script> <script language=php>・・・・</script> <?php ・・・・ ?> の中身(・・・・の部分)をpreg_matchで抜き出したいと思っています。 preg_match("/<script language=?"php?">(*.)<\/script>/is" ,$p,$matches) と preg_match("/<php? (*.) ?>/is" ,$p,$matches) としましたがうまくいきません。どのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • PHPで文字を検索して取り込みたい。

    PHPで文字を検索して取り込みたい。 %の文字が、何度か出現するソースなのですが そのソースの中にある50%のような全角で%の数値を 取り込みたいのです。 //////ソース//////// <table> <TR> <TD>あ</TD> <TD><B>88%</B>/TD> </TR> <TR> <TD>す</TD> <TD><B>85%</B>/TD> </TR> ........... </table> /////////////////////// 下記のように実行しましたが 思うような結果は得られません。 <?php $str = file_get_contents('http://123456/index.html'); if (preg_match('!<table>\s*?(.*?)</table>!s', $str, $res)) $text = mb_convert_encoding($res[1],"shift-jis","UTF-8");preg_match_all("/-*[0-9]+/",str_replace(",","",$text),$matches); print ($matches[0][0]); ////////////////////////////// php初心者です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 文字列連結がうまくいきません

    define("SITE3_1", "http://www.yahoo.co.jp/"); (略) <div id="tab3-1" class="hoge"><dl><?php testfunc(SITE3_1,1,1); ?></dl></div> <div id="tab3-2" class="hoge"><dl><?php testfunc(SITE3_2,1,1); ?></dl></div> <div id="tab3-3" class="hoge"><dl><?php testfunc(SITE3_3,1,1); ?></dl></div> <div id="tab3-4" class="hoge"><dl><?php testfunc(SITE3_4,1,1); ?></dl></div> <div id="tab3-5" class="hoge"><dl><?php testfunc(SITE3_5,1,1); ?></dl></div> となってるのをループ処理したいのですが、 うまくいきません。   <?php    for($i=1; $i< 6; $i++){     echo "<div id=\"tab3-\".i.\" class=\"tabPanel\"><dl>";     testfunc(("SITE3_".i."),1,1)";     echo "</dl></div>";    }   ?> どう書けばよいでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現を用いてHTML内の文字列を抜き出したいのですが・・・

    PHPの正規表現を用いて外部Webページのソース内にある文字列を抜き出してきたいのですがうまくいきません。 例えば、 <td class="nml">食べてきれいにやせる! 伊達式脂肪燃焼ダイエット / 伊達友美<br></td> のようなタグに挟まれた文字列を抜き出します。自分で書いたプログラムは以下の通りです。 <?php //外部URL $fp = fopen("特定のURL", "r"); while(!feof($fp)){ //HTMLソースを全文取得 $line = fgets($fp, 1024); //各行を配列に格納 $line_array[] = $line; } //配列を一つの文字列に変換 $line_text = implode("", $line_array); if(preg_match_all('ここの部分が思いつきません', $line_text, $match)){ print $match; }else{ print 'マッチしません'; } ?> 色々と調べて試行錯誤しましたが、結局うまくいきませんでした。 正規表現となる部分をどなたかご教授頂けないでしょうか。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきま

    phpでhtmlソースを解析し、文字を抜き出したいのですが、上手くきません。 <span class="a">あ</span> <span class="b">い</span> <span class="a">う</span> <span class="b">え</span> <span class="a">お</span> <span class="b">か</span> このようなソースから「あいうえお」の部分だけを抜き出したいのです。 以下のようにしているのですが、改行が無い場合は上手く取得できるのですが、 以下のような形で途中に改行が入っている場合、上手く取得できません。 <span class="a">あ </span> このような場合でも取得できるようにするにはどうすればよいでしょうか。 $lines = file("http://~~"); foreach ($lines as $line) { preg_match('/<span class="a">(.*?)<\/span>/ms', $line, $match); preg_match('/<span class="b">(.*?)<\/span>/ms', $line, $match); } msをつけておりますが、 この場合は1行1行ループしているために意味がない状態になるのでしょうか。 どのようにすれば取得させることができるのでしょうか。 お手数をおかけしますが何卒よろしくお願い致します。

    • ベストアンサー
    • PHP
  • タグの中身を取り出す方法

    HTMLからタグの中身を取り出す方法を探しています。 例えば ======================================= <DIV class=entry id=entry-121> <DIV class=entry-body> <P>まいど</P> </DIV> <A id=more></A> <DIV class=entry-more> <P>もうかりまっか?</P> </DIV> </DIV> ======================================= とあるとき、 <DIV class=entry id=entry-121>  </DIV> の中身を取り出したいと思います。 具体的にやりたいことはBlogから本文だけを抜き出すことなのですが・・・。 良い方法がありましたらご教授下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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

専門家に質問してみよう